Kotlin KClass实例里面的扩展功能
我需要访问通用扩展函数中的类类型。 例如,如果我想创建一个扩展函数来返回我正在扩展的类型成员的集合,我会这样做:
fun <T> T.getMembers() = this::class.memberProperties
问题是我不能做这个:: class和T ::类里面的函数。 有没有办法访问泛型类的类类型?
一般来说,你不会使用::
从this
类中获取类,因为this
引用了一个实例,而不是一个类型。 一般来说,你会从this.javaClass.kotlin
从this
类
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