如何在 Kotlin 中初始化引用变量

7
在Java中,可以使用null初始化引用变量,例如字符串变量可以这样初始化:
String str = null;

在Kotlin中,重点是尽可能避免使用null。那么我如何在不使用null的情况下初始化属性?
var str: String = ...

使用非空的 String 值? - Bubletan
你可以使用 lateinit varby lazy { ... } 来定义一个属性,该属性仅在稍后初始化为非空值。请参见:https://dev59.com/s1oV5IYBdhLWcg3wJ8Ab - hotkey
4个回答

6

用户需要使用lateinit关键字。在使用前需要进行初始化。

private lateinit var str : String
fun myInit(){
    str = "something";
}

请注意:访问未初始化的lateinit属性会导致UninitializedPropertyAccessException异常。
但是,lateinit不支持基本数据类型,例如Int

5
在 Kotlin 中,重点不是从不使用 null(和可空类型),而是通过方便的语言结构安全地使用它,而不是害怕它。尽可能使用非空类型是理想的,但您并不总是必须避免使用它们,这就是为什么存在各种 null 处理结构(安全调用、Elvis 运算符等)的原因。
如果您可以推迟创建变量直到有东西要分配给它,那就是一个解决方案。如果不能,那么将其标记为可空并将 null 分配给它是完全可以的,因为编译器会防止您对其进行危险操作。

1

你可以做到

var str: String

...

str = "Some Awesome Value"

如果你想让它可空,你可以这样做

var str: String?

额外加分如果你在代码中使用“超棒”这个词。 - undefined

0
作为一个选项:
var str: String by Delegates.NotNull()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接