当我有一个不可变的val可选项时,编译器会跟踪有关我对null执行的检查的信息,并且可以将该变量视为非null并直接在if条件中调用它。
val s: String? = "test"
if (s != null) {
s.startsWith("3") // This works
}
if (!s.isNullOrEmpty()) {
s.startsWith("3") // Not working
}
是否可以检查扩展功能并让编译器知道它?
答案 0 :(得分:4)
在Kotlin中尚不可用。
JetBrains(https://discuss.kotlinlang.org/t/status-of-kotlin-internal-contracts/6392)目前正在开发一种称为“合同”的功能–与他们对Java代码使用their own @Contract
annotation所做的相似,但将得到编译器的支持
但是,它处于早期阶段,还没有发布日期。