Kotlin KClass实例内部扩展函数

Kotlin KClass实例内部扩展函数

问题描述:

我需要访问通用扩展函数中的类类型。例如,如果我想打一个扩展函数返回我扩展类型的成员的集合,我会做:Kotlin KClass实例内部扩展函数

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

的问题是,我不能这样做::类,也不T: :函数内部的类。有没有办法访问泛型类的类类型?

一般而言,您不会使用::this获取类,因为this引用了实例,而不是类型。通常你会从thisthis.javaClass.kotlin

类参考类型,所以通常你会引用KClass 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

+0

非常感谢你! –

+0

不客气:) –

+0

让'T'成为'Any'的孩子解决了我(几乎完全无关)的问题 - 谢谢! – forresthopkinsa