If I try to access the javaClass of a generic type T the Kotlin compiler complains that T is not a subtype of kotlin.Any

class Foo<T> (val t: T ){
    val cls = t.javaClass // Error, T is not a subtype of kotlin.Any
}

If define T as a subtype of Any everything works ok.

class Bar<T:Any> (val t: T ){
    val cls = t.javaClass // OK
}

Q1)如果类型"T"不是"任何"的子类型,那么它可以是哪个类别的子类型?

Q2) Do a javaClass exist for all instances of T and if so how do I access it ?

推荐答案

默认值generic upper bound不是Any而是Any?.

这也意味着从一个可为null的参数中得到javaClass并不安全.

To get a javaClass from a generic type instance with Any? upper bound, you can cast it to Any:

val cls = (t as Any).javaClass //unsafe
val clsOrNull = (t as? Any)?.javaClass //safe

Kotlin相关问答推荐

调用即发即忘方法--哪个作用域?

Kotlin多平台(KMP)保存到文件不能在iOS上保存

jOOQ Kotlin Coroutines - Select all and exists查询

Kotlin:我可以将函数分配给 main 的伴随对象中的变量吗?

如何在 Android Jetpack Compose 中的画布上绘制一侧加厚的描边?

在 SplashActivity 中显示的 Firebase 应用内消息.如何在 MainActivity 中显示它?

listOf() 返回 MutableList

将 Kotlin 类属性设置器作为函数引用

Kotlin 枚举中的循环引用

无法解决:androidx.lifecycle:lifecycle-viewmodel-ktx:1.1.1

Kotlin 类的调用方法

Kotlin:子构造函数如何使用其父构造函数的辅助构造函数?

如何捕获传递给模拟函数的参数并返回它?

参数不匹配;SimpleXML

在 gradle android library kotlin 项目中禁用 META-INF/* 生成

使用导航组件在不同的图形之间导航

具有泛型param的Kotlin抽象类和使用类型param的方法

IllegalStateException:function = , count = 3, index = 3

Android studio,构建kotlin时出现奇怪错误:生成错误代码

如何在 spring-boot Web 客户端中发送请求正文?