【发布时间】:2022-01-02 16:35:03
【问题描述】:
我是 kotlin 的新手,我有一个问题。
好吧,代码如下:
data class People(val name: String?=null, val age: Int?=null )
fun main(){
val people = listOf(People("Alice"),People("John",32))
val older = people.maxByOrNull{ it.age ?: 0 }
// val resultadoFinal = maisVelho
println("${older?.name}")
println("${people[0].name}")
}
如果在println("${older?.name}") 中取出'?',你会得到这个错误:
Only safe (?.) or non-null asserted (!!.) calls are allowed on a nullable receiver of type People?
我的理解是,这意味着 maxByOrNull 返回的内容可能为 null,因此您必须验证它是否为 null。 我的问题是:这样对吗?
另外,阅读有关 maxByOrNull 的信息 https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/max-by-or-null.html
有这个部分:
val emptyList = emptyList<Pair<String, Int>>()
val emptyMax = emptyList.maxByOrNull { it.second }
println(emptyMax) // null
这部分emptyList<Pair<String, Int>>()对我来说很奇怪。那是什么?我知道他正在创建一个空列表,但这是什么语言?我会进一步了解这个吗?这个 Pair 东西,为什么他把 String 和 Int 放在里面?在kotlin中创建一个空列表没有更简单的方法吗?
嗯,就是这样。谢谢。
【问题讨论】:
-
阅读以下内容:kotlinlang.org/docs/null-safety.html - 基本上,Kotlin 强制执行一个系统,您可以在该系统中明确地说绝对不会为空(如果那样的话它会崩溃不是真的),或者它们可以为空,并且您需要在任何可能出现问题的地方处理它。它很有用,你会习惯的!名为
*OrNull*的函数显式返回 null 作为“失败”结果,这使您可以轻松提供后备值,或仅对实际(非 null)结果运行后续步骤
标签: java kotlin validation null empty-list