2
我需要訪問通用擴展函數中的類類型。例如,如果我想打一個擴展函數返回我擴展類型的成員的集合,我會做:Kotlin KClass實例內部擴展函數
fun <T> T.getMembers() =
this::class.memberProperties
的問題是,我不能這樣做::類,也不T: :函數內部的類。有沒有辦法訪問泛型類的類類型?
我需要訪問通用擴展函數中的類類型。例如,如果我想打一個擴展函數返回我擴展類型的成員的集合,我會做: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