基本上,我有一个函数,可以执行一些操作,但具体地说,它会检查我传递的两个值是否为空。从各处调用此函数以确保这两个值不为空。后来Kotlin抱怨我没有检查null。有没有一种方法可以使Kotlin已经知道我在不使用null
的情况下检查!!
?
这是一个简单的例子:
private fun stuff() {
var possibleNull: String? = "test"
if (testNull(possibleNull)) {
mustPassNonNull(possibleNull)
}
}
private fun mustPassNonNull(possibleNull: String) {
//use value that isn't null
}
private fun testNull(possibleNull: String?): Boolean {
return possibleNull != null
}
如果testNull
不是true
,并且在调用possibleNull
之前,该检查位于null
上,则基本上if
仅是mustPassNonNull
我让Kotlin知道我已经检查过了吗?当然不使用!!
。
谢谢。
答案 0 :(得分:4)
可以使用合同。目前在Kotlin 1.3中处于实验阶段。
可以为您自己的函数声明合同,但是此功能是实验性的,因为当前语法处于早期原型状态,并且很可能会更改。另外,请注意,当前Kotlin编译器不验证合同,因此编写正确和合理的合同是程序员的责任。 -kotlinlang.org
Graph
我引用的文章:
答案 1 :(得分:0)
这似乎是一种简单的let
情况
private fun stuff() {
var possibleNull: String? = "test"
possibleNull?.let { mustPassNonNull(it) }
}
这种方法mustPassNonNull会知道它不是null:)
此外,如果您需要做的不仅仅是检查可空性,还可以:
possibleNull
?.takeIf { /* it's not null here anymore, add any checks you need */}
?.let { /* both non-null and checked for whatever you need */}