我对 Kotlin 可空性有疑问,我想知道我是否能够通过合同解决它。对于这样的Java
接口:interface Action<T>{ void execute(T param); }
有两个扩展:
fun <T, R> Action<T>.map(mapper:(R)->T): Action<R> {
return Action{ execute(mapper(it)) }
}
和
fun <T> Action<T>.ifNotNull(): Action<T> {
return Action { if(it != null) execute(it) }
}
还有一个带有可为空数据的通用模型:
class Model<T>(val data: T?)
现在我创建了以Action
接口为参数的函数。案例是仅在 时执行动作参数param != null
,因此如下所示:
fun <T> callback(model: Model<T>, action: Action<T>){
action
.map{ it.getData() } //compilation error: getData return T? when action require T
.ifNotNull() //execute only when data!=null
.execute(model)
}
那么现在,是否有任何选项可以使用 Kotlin 合约来确保编译器action
不会使用 null 参数执行?