Kotlin KClass实例里面的扩展功能

我需要访问通用扩展函数中的类类型。 例如,如果我想创建一个扩展函数来返回我正在扩展的类型成员的集合,我会这样做:

fun <T> T.getMembers() = this::class.memberProperties 

问题是我不能做这个:: class和T ::类里面的函数。 有没有办法访问泛型类的类类型?

一般来说,你不会使用::this类中获取类,因为this引用了一个实例,而不是一个类型。 一般来说,你会从this.javaClass.kotlinthis

T引用一个类型,所以一般你会引用K T::class Class和T::class

但是,在您的特定代码片段中,这些都不会没有一些额外的更改。

由于泛型类型T不限制为Any ,因此不能访问javaClass字段。 要添加约束,请使用:

 fun <T : Any> T.getMembers() = this::class.memberProperties 

由于泛型类型不是通用的,所以不能使用T::class 。 为了确定T,请使用:

 inline fun <reified T : Any> T.getMembers() = T::class.memberProperties 

请参阅https://kotlinlang.org/docs/reference/inline-functions.html#reified-type-parameters