在Kotlin中是否有任何方法可以在应用程序启动时对变量null
进行注释,并且在创建变量后无法将其再次分配给null
?
我无法将字段设置为var someField: Boolean?
因为它可以在某个时候为空,或者lateinit var someField: Boolean
因为期望在使用该字段之前初始化它(或者这是解决我的情况的正确方法?)。
答案 0 :(得分:3)
我不确定为什么lateinit
对您不起作用,除了对原始类型不起作用之外,但notNull
delegate可能正是您要寻找的:
class X {
var z: String by Delegates.notNull()
}
val x1 = X()
x1.z = "foo"
println(x1.z) // foo
val x2 = X()
println(x2.z) // IllegalStateException: Property z should be initialized before get.
如果在设置之前阅读它,它将给您一个例外,否则该属性将具有非null类型。
答案 1 :(得分:0)
我不确定,因为我没有真正看到要执行的操作,但是为什么初始化时不创建var?因此var永远不会为null,您将不必使用null初始化
如果您真的需要此var来检查它是否为null更改它,为什么不使用int而不是bool?
答案 2 :(得分:0)
使用Latenit声明它:lateinit var someField: Boolean
并分配了非null值后,像这样someField!!
有了这个注释,您就对编译器说somefield
不是null
,但保持它为非空是您的责任。
答案 3 :(得分:0)
当使用比$("img").attr("src",$.datepicker.formatDate("dd-mm-yy", date));
更复杂的类型时,应考虑在其周围实现Null-Value-Pattern。 Kotlin 为此类用例提供了一种简洁的结构:
$("img").attr("alt",$.datepicker.formatDate("dd-mm-yy", date));
像这样,您不会遇到任何可空性问题。您也可以直接在实现中定义默认值。