私はクラスを提供する必要があります。私はクラスFooを持っているので、もし私がFoo.class
を供給すればそれはうまくいくが、私はList<Foo>.class
を供給する必要があるが、これは存在しない。Foo.classは動作しますが、リスト<Foo> .classはありません
リストタイプのクラスをどのようにして渡すことができますか?
何か助けていただければ幸いです。
私はクラスを提供する必要があります。私はクラスFooを持っているので、もし私がFoo.class
を供給すればそれはうまくいくが、私はList<Foo>.class
を供給する必要があるが、これは存在しない。Foo.classは動作しますが、リスト<Foo> .classはありません
リストタイプのクラスをどのようにして渡すことができますか?
何か助けていただければ幸いです。
type erasureのため、あなたはできません。実行時に、ジェネリック型パラメータは消去され、使用できなくなります。その結果、List<Foo>
はコンパイル時に汎用として存在する可能性がありますが、実行時にClass<List>
のList.class
しか持たないことになります。 Java Language Specification, version 8, section 15.8.2から
:
例えば名前型が型変数(§4.4)またはパラメータ化された型(§4.5)または要素タイプタイプである配列である場合は、コンパイル時エラーであります変数またはパラメータ化された型。
、List<Foo>.class
、T.class
、List<Foo>[].class
、及びT[].class
は全て無効である(T
は型パラメータであると仮定して)。
あなたは正しいです、 'List .class'はタイプ消去のために存在しません。 'List.class'だけがあります。 –
azurefrog