Properties Kotlin-可为null的属性默认为null值
假设我定义了一个具有可为null的属性的类Properties Kotlin-可为null的属性默认为null值,properties,kotlin,nullable,Properties,Kotlin,Nullable,假设我定义了一个具有可为null的属性的类 class ABC { var myProperty: String? = null } 有没有办法将其默认为空值? 也许是类似SCALA的东西 var myProperty: String? = _ // compilation error 或者简单地说: var myProperty: String? // compilation error 我知道我们可以使用一个lateinit变量,Kotlin 1.2中的变量可以在以后检查初始
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是首选的方式吗?默认为空值是可能的还是故意忽略了它?Kotlin故意要求您显式初始化所有属性。没有速记语法。对于可为null类型的属性,首选方法不是使用
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
}
附言-
不幸的是,Kotlin中保留了像“\u1”这样的空间字符,因此您无法使用它命名变量并创建
var myProperty=\ucode>您在此处将其默认为null:var myProperty:String?=空
lateinit
不会将其默认为任何值,使用isInitialized
的显式检查是一种与lateinit
功能背后的意图背道而驰的黑客行为。换句话说,您不可能必须使用late init
(这会在早期访问时引发异常)或者显式初始化变量。@MarkoTopolnikvar myProperty:String?=null
默认为null,但我发现=null
是多余的,并且试图简化代码,因此您不是在询问默认为用户提供的值,而是询问内置的隐式默认值。科特林的一般咒语是“明确”,这是一个例子。@MarkoTopolnik我只需要字符串?默认为null,没有明确说明。但lateinit似乎最符合我的需要。谢谢“谁说int应该是0?”-逻辑:)<代码>0
对它有很多意义。如果使用数据,则null
和0
之间的差异是巨大的。假设您做了一个销售记录,但由于连接问题,unitsSold
值没有设置,您想使用0
(这意味着没有售出任何东西)还是null
(意味着数据未知)?当使用计数器时,默认设置为0
是有意义的,但是还有更多的用例。这取决于语言的目标:保存击键或让开发人员考虑其默认值。我猜Kotlin是针对后者的:KTLLINE DEVS应该考虑将'''作为变量值初始化器添加到“类型缺省值”中,即int值为0,字符串为空。