小编Ano*_*ous的帖子

java中lateinit相对于null初始化的优势?

我正在尝试一些 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)

java kotlin

7
推荐指数
1
解决办法
317
查看次数

标签 统计

java ×1

kotlin ×1