我无法理解下面的Kotlin文档:
The initializer, getter and setter are optional. Property type is optional
if it can be inferred from the initializer or from the base class member being overridden.
Examples:
var allByDefault: Int? // error: explicit initializer required, default
getter and setter implied
Run Code Online (Sandbox Code Playgroud)
编译器为什么需要显式初始化器的唯一解释(至少我能想出的唯一解释)是Kotlin没有属性的默认值.这样对吗?如果是这样,为什么?换句话说:Kotlin属性和Java字段(具有默认值)之间有什么区别,它们不允许我们拥有属性的默认值?
vod*_*dan 13
这很简单:在Java中,默认值为0(零)和null.但是在Kotlin中,大多数值都不可为空,所以你不能用它们初始化它们null.对于原始值,可能存在使用零初始化的默认策略,但是为了保持一致而没有这样做.但在原始数组中,默认值确实为零.
如果您确实需要初始化语义,请查看lateinit属性:https://kotlinlang.org/docs/reference/properties.html#late-initialized-properties.
该机制基本上允许使用init初始化字段null,但随后将使您从空断言中解放出来.
加成
实际上Kotlin 对初始化非常聪明.例如,有效:
val x: Int
if(something)
x = 1
else
x = 2
println(x)
Run Code Online (Sandbox Code Playgroud)
在这里kotlinc可能会x在使用之前进行初始化,因此代码是可以的
| 归档时间: |
|
| 查看次数: |
5328 次 |
| 最近记录: |