如何获取类中类型参数的已擦除类型



我知道,在运行时,类型参数将被擦除,因此我们无法直接访问它。这就是为什么在kotlin中有具体化的类型参数。但它的使用仅限于函数。我甚至尝试在构造函数中接收这样的显式参数:

class Outer<T> {
inner class Inner(private val clazz: Class<T>) {
private fun func() {
if (obj is clazz) {    // even tried obj is clazz::class.java
...
} else {
...
}
}
}
}

但这让我在安卓工作室中出现Unresolved reference: clazz错误。有人请帮帮我。

您可以使用is的动态等价物,即Class.isInstance():

if (clazz.isInstance(obj)) { // ...

(如果你想坚持纯Kotlin,KClass也有一个isInstance()方法。(

clazz不是类名,因此不能将is与之一起使用。它是一个类型为Class<T>的属性。所以你必须使用==来与它进行比较

if (obj::class.java == clazz) { // ...

最新更新