Kotlin代表了一个未定义的价值
所以关于Kotlin
一件大事就是强迫你不要在你的项目中实现Kotlin
。
什么是替换null
想法然后,如果你必须创建一个新的对象Foo()
然后填写它的属性(如填写表格) foo.name = "foo"
, foo.age = 10
, 等等…
然后检查哪些字段没有被赋值并警告用户填写它。
我可以简单地使用?
对variablestypes,并检查是否为空,但这是摆脱Null Pointer Exception
的整个想法
在Kotlin有没有一个不确定的领域有什么好的实现。
所以关于Kotlin的一件大事就是强迫你不要在你的项目中实现空想。
不。Kotlin中的“零安全”概念并不意味着消除所有的空值。 其实,甚至完全相反:你现在可以安全地使用空值。 这个想法是防止在运行时调用空引用。 为了达到这个目的,Kotlin迫使你在编译时处理潜在的空值。
我可以简单地使用? 对variablestypes,并检查是否为空,但这是摆脱空指针exception的整个想法
Kotlin的建筑师们为“?”的概念做了很多的努力。 可空types旨在定义一个未定义的状态。 而且因为现在使用空值是安全的,所以像Safe Calls , Elvis Operator或者Safe Casts这样的概念能够有效地处理空值(而不是仅仅把if (a != null)
放在它周围)。
处理缺少值的惯用方法是使用空和无效操作。 也就是说,你可以使用java 8的Optional
,但没有理由,因为该语言提供了相同的function。 例如,你可以做
val anOptional: Optional = Optional.ofNullable(expr) // start with a nullable value .map { o -> someExpression } // map .filter { o -> aBooleanExpression } // filter .orElse(aDefaultValue) // default if empty
但是kotlin使用无效操作提供相同的function:
val aNullable: Foo? = expr // start with a nullable value ?.let { o -> someExpression } // map ?.takeIf { aBooleanExpression } // filter ?: aDefaultValue // default if null