Kotlin - 可空 属性 默认为空值

Kotlin - nullable property default to null value

假设我用 nullable 属性

定义了 class
class ABC {
   var myProperty: String? = null
}

有没有办法将其默认为空值? 也许类似于 SCALA?

var myProperty: String? = _  // compilation error

或简单地:

var myProperty: String?  // compilation error

我知道我们可以使用来自 Kotlin 1.2 的 lateinit 变量,稍后可以像这样检查初始化:

lateinit var myProperty: String

if (::myProperty.isInitialized) {
   //value is not-null
}

那么 lateinit 是首选方式吗?可以默认为空值还是故意省略?

Kotlin 有意要求您显式初始化所有属性。没有 shorthand 语法。对于可空类型的 属性,首选方法不是使用 lateinit,而是使用 null 初始化程序声明它。

lateinit 属性的 isInitialized 方法旨在处理资源清理等复杂情况;对于想要节省编写 = null 作为 属性 声明的一部分的用户,它不打算用作 null 检查的替代品。

简短的回答是否定的。
与其他一些语言(Scala、Go)不同,Kotlin 并不假设它最清楚该类型的默认值是什么(谁说 int 应该是 0?)

你也可以声明一个全局函数

fun nullString(): String? {
    return null
}

并像

一样使用它
class ABC {
   var myProperty = nullString()
}

由于语言中只有一个空引用,全局变量也可以工作

var nullString : String? = null

class ABC {
   var myProperty = nullString
}

P.S。 - 不幸的是,像 '_' 这样的空格字符在 Kotlin 中是保留的,所以你不能用它来命名你的变量并创建 var myProperty = _