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