Víc*_*cia 3 generics kotlin extension-function
我需要访问通用扩展函数中的类类型。例如,如果我想做一个扩展函数以返回我正在扩展的类型的成员的集合,我会这样做:
fun <T> T.getMembers() =
this::class.memberProperties
Run Code Online (Sandbox Code Playgroud)
问题是我不能在函数内部执行this :: class或T :: class。有什么方法可以访问泛型类型的类类型?
通常,您不会使用::从获取类this,因为它this引用的是实例,而不是类型。一般来说,你会从获取类this与this.javaClass.kotlin
T引用类型,因此通常您可以使用来引用KClass T::class。
但是,在您的特定代码段中,没有任何其他更改,这些都不起作用。
由于通用类型T不受限于Any,因此您无法访问javaClass字段。要添加约束,请使用:
fun <T : Any> T.getMembers() =
this::class.memberProperties
Run Code Online (Sandbox Code Playgroud)
由于通用类型未定义,因此您不能使用T::class。要验证T,请使用:
inline fun <reified T : Any> T.getMembers() =
T::class.memberProperties
Run Code Online (Sandbox Code Playgroud)
参见https://kotlinlang.org/docs/reference/inline-functions.html#reified-type-parameters
| 归档时间: |
|
| 查看次数: |
1525 次 |
| 最近记录: |