Kotlin-可为空的属性默认为空值

时间:2018-08-01 07:49:16

标签: properties kotlin nullable

假设我定义一个具有 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是首选方法吗?可以默认为空值还是故意将其省略?

3 个答案:

答案 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 }