kotlin中的::class、::class.java、::javaClass以及.javaClass的区别是什么?

kotlin中获取class的这些方式有什么区别,比如::class、::class.java、::javaClass以及.javaClass等等。

kotlinclassjavaClassclass.java
1
182
小课
小课2022-06-15 17:53
1 个回答

::是kotlin反射中常用的操作符,可以用于获取类的引用,函数的引用,属性的引用,更多内容查看官方文档

::class是用于取Kotlin类运行时的引用,返回的是KClass<T>对象。

::class.java分为两部分,先是::class获取Kotlin类运行时的引用,然后是.java,这个是KClass<T>类型的一个扩展属性,用于获取当前KClass<T>对应的Class<T>对象。

.javaClass是Any类型的扩展属性,用于获取当前类型的Class<T>对象。

::javaClass是用于获取javaClass这个扩展属性的引用,返回的是KProperty<T>对象。

关于上面的提到的扩展属性javaClass和java,都可以在JvmClassMapping.kt中找到定义。在涉及到与Java互调,会常用到Class<T>,通过以下方式都能得到Class<T>对象。

fun <T> test(clazz: Class<T>) {}

val zhixing = String()
test(zhixing::class.java)
test(zhixing.javaClass)
test(zhixing::javaClass.get())//通过属性引用的get方法获取属性值
1
已修改
小课
小课2022-06-15 18:36
你的回答

内容