我在尝试一些Android相关的东西,同时学习Kotlin,我想知道如何初始化视图和属性。
据我所知,在Kotlin和Java中,合同(“在使用之前我会初始化”)以及UninitializedPropertyAccessException和NullPointerException两者都是更或多少等效的。你可以在这两种情况下进行isInitialized检查。我只是不知道,为什么JetBrains会如此关注null安全性,并以不同的形式引入完全相同的事物。
那么,lateinit有什么优势吗?
示例代码:
public class Foo {
private String bar = null;
public void bar123() {
if (bar == null) {
bar = "bar";
}
}
}
vs
class Foo {
private lateinit var bar: String
fun bar123() {
if (!::bar.isInitialized) {
bar = "bar"
}
}
}
var bar
声明为String
而不是String?
,因此您无需执行空值检查,因此您的代码(引用bar
)更加简洁。 - Nikolai ShevchenkoString
而你传递了String?
时使用所有这些!!
。 - Nikolai Shevchenko