假设我有一个需要类类型和 bool 值的委托(delegate)类。如果此委托(delegate)用于的属性类型可以为空,我会考虑特定的功能。为了简单起见,假设它应该根据 bool 参数为空值抛出错误。
class Sample<T: Any> (val type: KClass<T>,
val allowNulls: Boolean){
private var value: T?
operator fun getValue(thisRef: Any, property: KProperty<*>): T? {
return if (allowNulls)
value
else
value?: throw Exception("Value is null!")
}
operator fun setValue(thisRef: Any, property: KProperty<*>, value: T?) {
this.value = value
}
}
我想创建一个具体化的函数,以便轻松生成此类的实例,该实例自动确定类型是否应该为空。同样,这对于对可空属性表现不同的委托(delegate)很有用。例如,这将用于根据委托(delegate)属性是否可以为空来允许不同的行为:
val nullableString by sample<String?>()
val nonnullString by sample<String>()
val nullableString2: String? by sample()
val nonnullString2: String by sample()
如何确定具体类型是否可以为空?我看不到访问此信息的方法:
inline fun <reified T: Any> sample(): Sample<T>{
return Sample(T::class, /** T is nullable */)
}
最佳答案
如果 T
是一个具体化的泛型类型参数,您可以通过一个简单但乍一看并不明显的检查来确定它是否可以为空:
if (null is T) {
// T is nullable
}
但是在您的示例中
T
有 Any
上限,因此表达式将始终为假。
关于kotlin - 判断reified类型是否可以为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58923487/