汎用拡張関数内でクラス型にアクセスする必要があります。例えば、私は拡張していたタイプのメンバーのコレクションを返すために、拡張機能を作成したい場合、私はどうなる:拡張機能内の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
Tを参照すると、一般的にT::class
のKClassを参照するクラスが得られます。
ただし、お客様の特定のコードスニペットでは、これらのどちらも変更を加えなくても機能しません。
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
感謝を参照してください!! –
あなたは大歓迎です:) –
'Any'の' T'子が私の(ほとんど無関係な)問題を解決しました - ありがとう! – forresthopkinsa