我正在尝试从任何变量中强制转换一个选项,以便确定该选项是否为空,但是IDE表示Option<*>不能作为智能强制转换,因为它是在另一个模块中声明的。
fun hasEmptyValue(column: Pair<String, Any>): Boolean = when {
column.second is Option<*> -> column.second.isEmpty()
else -> false
}发布于 2018-07-07 09:25:11
以下是smartcast为我工作的原因:
fun hasEmptyValue(column: Pair<String, Any>): Boolean {
val second = column.second
return when (second) {
is Option<*> -> second.isEmpty() //Smart cast to arrow.core.Option<*>
else -> false
}
}关于为什么不允许跨模块进行智能转换的解释,请参阅Jetbrains问题跟踪器这里
只有当同一个属性的多个访问被保证返回相同的值时,智能强制转换才有效。如果在与访问位置不同的模块中定义了要访问的属性,则可以将包含该属性的模块与访问该属性的模块分开重新编译,从而打破智能强制转换的关键要求。因此,不允许跨模块智能转换.
https://stackoverflow.com/questions/51220688
复制相似问题