4

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

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

问题是我不能在函数内部执行 this::class 或 T::class 。有没有办法访问泛型类型的类类型?

4

1 回答 1

5

通常,您不会使用::from 获取类this,因为this引用的是实例,而不是类型。一般来说,你会从thiswiththis.javaClass.kotlin

T 引用一个类型,所以通常你会用T::class.

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

由于泛型类型不限TAny,因此您无法访问 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

于 2017-02-03T23:32:13.770 回答