基本上我有一个函数可以做一些事情,但具体来说它检查我传递的两个值是否为空。从不同的地方调用该函数以确保这两个值不为空。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
}
Run Code Online (Sandbox Code Playgroud)
基本上testNull只有true当possibleNull不是并且该检查在调用之前null就在右侧,所以我可以让 Kotlin 知道我已经在检查了吗?当然不使用。ifmustPassNonNull!!
谢谢。
通过使用合同是可能的。目前在 Kotlin 1.3 中处于实验阶段。
可以为您自己的函数声明合约,但此功能是实验性的,因为当前语法处于早期原型状态,很可能会发生更改。另请注意,目前 Kotlin 编译器不验证合约,因此程序员有责任编写正确且合理的合约。-kotlinlang.org
@ExperimentalContracts
fun stuff() {
var possibleNull: String? = "test"
if (testNull(possibleNull)) {
mustPassNonNull(possibleNull)
}
}
fun mustPassNonNull(possibleNull: String) {
//use value that isn't null
}
@ExperimentalContracts
fun testNull(possibleNull: String?): Boolean {
contract{
returns(true) implies (possibleNull is String)
}
return possibleNull != null
}
Run Code Online (Sandbox Code Playgroud)
我参考的文章:
| 归档时间: |
|
| 查看次数: |
828 次 |
| 最近记录: |