2016-04-27 3 views
0

私はクラスを提供する必要があります。私はクラスFooを持っているので、もし私がFoo.classを供給すればそれはうまくいくが、私はList<Foo>.classを供給する必要があるが、これは存在しない。Foo.classは動作しますが、リスト<Foo> .classはありません

リストタイプのクラスをどのようにして渡すことができますか?

何か助けていただければ幸いです。

+0

あなたは正しいです、 'List .class'はタイプ消去のために存在しません。 'List.class'だけがあります。 – azurefrog

答えて

2

type erasureのため、あなたはできません。実行時に、ジェネリック型パラメータは消去され、使用できなくなります。その結果、List<Foo>はコンパイル時に汎用として存在する可能性がありますが、実行時にClass<List>List.classしか持たないことになります。 Java Language Specification, version 8, section 15.8.2から

名前型が型変数(§4.4)またはパラメータ化された型(§4.5)または要素タイプタイプである配列である場合は、コンパイル時エラーであります変数またはパラメータ化された型。

例えば

List<Foo>.classT.classList<Foo>[].class、及びT[].classは全て無効である(Tは型パラメータであると仮定して)。

関連する問題