Kotlin KClass实例内部扩展函数
问题描述:
我需要访问通用扩展函数中的类类型。例如,如果我想打一个扩展函数返回我扩展类型的成员的集合,我会做:Kotlin KClass实例内部扩展函数
fun <T> T.getMembers() =
this::class.memberProperties
的问题是,我不能这样做::类,也不T: :函数内部的类。有没有办法访问泛型类的类类型?
答
一般而言,您不会使用::
从this
获取类,因为this
引用了实例,而不是类型。通常你会从this
与this.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
非常感谢你! –
不客气:) –
让'T'成为'Any'的孩子解决了我(几乎完全无关)的问题 - 谢谢! – forresthopkinsa