我需要访问通用扩展函数中的类类型。例如,如果我想创建一个扩展函数来返回我正在扩展的类型成员的集合,我会这样做:
fun <T> T.getMembers() =
this::class.memberProperties
问题是我不能在函数内部执行:: class和T :: class。有没有办法访问泛型类的类类型?
答案 0 :(得分:4)
通常,您不会使用::
从this
获取类,因为this
引用的是实例,而不是类型。通常,您可以使用this
this.javaClass.kotlin
获取课程
T引用一个类型,所以通常你会用T::class
引用KClass。
但是,在您的特定代码段中,如果没有其他更改,这些代码段都不会起作用。
由于泛型类型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