我知道,在运行时,类型参数将被擦除,因此我们无法直接访问它。这就是为什么在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) { // ...