我正在使用Kotlin
并考虑编写通用方法来检查是否有任何传递的参数是not null
.
方法可以在if
语句中使用,而不是手动检查每个参数。如果参数不为空,那么编译器应该假设if
它们仍然是内部语句not null
。下面的例子:
fun getFoo(): Foo? {
//return value
}
fun getBar(): Bar? {
//return value
}
fun execute(foo: Foo, bar: Bar) {
//do stuff
}
这是“传统”方式:
val foo = getFoo()
val bar = getBar()
if(foo != null && bar != null) {
execute(foo, bar)
}
这就是我想做的:
fun isNotNull(vararg params: Any?): Boolean {
return params.filterNotNull().isNotEmpty()
}
val foo = getFoo()
val bar = getBar()
if(isNotNull(foo, bar)) {
execute(foo, bar)
}
当然上面的代码不是编译(Type mismatch, Required: Foo, Found: Foo?
)。
有什么方法可以确保编译器foo
已经bar
检查过null
吗?我可以!!
在每个参数中使用,但这不是非常优雅的解决方案。也许一些建筑使用contract
?
使用手动检查时foo != null && bar != null
没有问题,因为自动smart cast
到Foo
和Bar
。