Tom*_*son 10 generics reflection kotlin
如果我尝试访问泛型类型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
}
Run Code Online (Sandbox Code Playgroud)
如果将T定义为Any的子类型,则一切正常.
class Bar<T:Any> (val t: T ){
val cls = t.javaClass // OK
}
Run Code Online (Sandbox Code Playgroud)
Q1)如果类型'T'不是'Any'的子类型,哪个类/类可以是?的子类型?
Q2)对于T的所有实例是否存在javaClass,如果存在,我该如何访问它?
hot*_*key 15
默认的一般上限是不是Any
,但Any?
.
这也意味着javaClass
从可以为空的参数中获取它是不安全的.
要从javaClass
具有Any?
上限的泛型类型实例获取a ,可以将其强制转换为Any
:
val cls = (t as Any).javaClass //unsafe
val clsOrNull = (t as? Any)?.javaClass //safe
Run Code Online (Sandbox Code Playgroud)