假设我定义一个具有 nullable 属性
的类class ABC {
var myProperty: String? = null
}
是否可以将其默认为空值? 也许类似于SCALA?
var myProperty: String? = _ // compilation error
或简单地:
var myProperty: String? // compilation error
我知道我们可以使用 lateinit 变量,以后可以像这样检查来自Kotlin 1.2的变量:
lateinit var myProperty: String
if (::myProperty.isInitialized) {
//value is not-null
}
那么lateinit是首选方法吗?可以默认为空值还是故意将其省略?
答案 0 :(得分:5)
Kotlin故意要求您显式初始化所有属性。没有速记语法。对于可为空类型的属性,首选方法不是使用lateinit
,而是使用null
初始化程序进行声明。
用于isInitialized
属性的lateinit
方法旨在处理复杂的情况,例如资源清理;对于想要节省编写null
作为属性声明的一部分的用户,它不打算替代= null
检查。
答案 1 :(得分:4)
没有答案。
与其他一些语言(Scala,Go)不同,Kotlin不会假定它最清楚类型的默认值(谁曾说过int应该为0?)
答案 2 :(得分:0)
您还可以声明一个全局函数
[JsonProperty(value from app settings)]
<appSettings>
<add key="Version" value="test" /> or value="production"
</appSettings>
并像使用它
fun nullString(): String? {
return null
}
由于该语言中只有一个空引用,所以全局变量也将起作用
class ABC {
var myProperty = nullString()
}
P.S。 --
不幸的是,Kotlin中保留了诸如'_'之类的空格字符,因此您不能使用它来命名变量并创建var nullString : String? = null
class ABC {
var myProperty = nullString
}