如果我尝试访问泛型类型 T 的 javaClass,Kotlin 编译器会抱怨 T 不是 kotlin.Any 的子类型
class Foo<T> (val t: T ){
val cls = t.javaClass // Error, T is not a subtype of kotlin.Any
}
如果将 T 定义为 Any 的子类型,则一切正常。
class Bar<T:Any> (val t: T ){
val cls = t.javaClass // OK
}
Q1) 如果类型“T”不是“任何”的子类型,那么它可以是哪个类的子类型?
Q2) T 的所有实例都存在 javaClass 吗?如果存在,我如何访问它?
默认通用上限 is not Any
but Any?
.
这也意味着获取一个值不是空安全的javaClass
来自可为空的参数。
为了得到一个javaClass
来自泛型类型实例Any?
上限,你可以将其转换为Any
:
val cls = (t as Any).javaClass //unsafe
val clsOrNull = (t as? Any)?.javaClass //safe
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)