我正在尝试一些 Android 的东西并在途中学习 Kotlin,我想知道如何初始化视图和属性。
据我了解,Kotlin 和 Java 中的契约(“我将在使用前初始化”)以及 UninitializedPropertyAccessException 和 NullPointerException 或多或少是等效的。在这两种情况下,您都可以进行 isInitialized 检查。我只是不知道为什么 JetBrains 会如此费心于空安全,然后以不同的形式引入完全相同的东西。
那么,lateinit 有什么优势吗?
示例代码:
public class Foo {
private String bar = null;
public void bar123() {
if (bar == null) {
bar = "bar";
}
}
}
Run Code Online (Sandbox Code Playgroud)
对比
class Foo {
private lateinit var bar: String
fun bar123() {
if (!::bar.isInitialized) {
bar = "bar"
}
}
}
Run Code Online (Sandbox Code Playgroud)