10


このタイプのリストをインスタンス化するために、タイプを変数に保存することは可能ですか?

//something like that
Type type = Boolean;
List<type> list = new List<type>();
list.add(true);
4

3 に答える 3

5

最初の要件については、次のものを探していますClass

Class type = Boolean.class;

ただし、ジェネリック型はコンパイル時にのみ存在するため、秒の要件は実現可能ではないと思います。

List<type> list = new List<type>(); // invalid code

ただし、を使用することはできますList<Object>。オブジェクトを受け入れBooleanます。これがあなたに不当に何かを買うかどうかはあなたのユースケースに依存します。

于 2012-11-27T08:13:14.633 に答える
1

Genericはコンパイル時の機能であり、実行時ではないため、変数を使用してジェネリック型を判別することはできません。NPEのメモ(を使用Class)を使用してもコンパイルされません。

Class<?> type = Boolean.class;
// can't do that...
List<type> list = new List<type>();
list.add(true);
于 2012-11-27T08:15:15.803 に答える
1

2番目のケースでは、タイプが不明なのになぜジェネリックを使用したいのですか?非ジェネリック配列リスト(jdk 5より前に使用)をより適切に使用できます。

   List a = new ArrayList();
   a.add(object);

このスタイルは引き続き上位バージョンでサポートされており、ジェネリックスタイルでさえコンパイル後にこの形式に変換されます。上記のコードで、抑制できる警告が表示されます。

于 2012-11-27T08:51:20.187 に答える