このタイプのリストをインスタンス化するために、タイプを変数に保存することは可能ですか?
//something like that
Type type = Boolean;
List<type> list = new List<type>();
list.add(true);
最初の要件については、次のものを探していますClass
。
Class type = Boolean.class;
ただし、ジェネリック型はコンパイル時にのみ存在するため、秒の要件は実現可能ではないと思います。
List<type> list = new List<type>(); // invalid code
ただし、を使用することはできますList<Object>
。オブジェクトを受け入れBoolean
ます。これがあなたに不当に何かを買うかどうかはあなたのユースケースに依存します。
Genericはコンパイル時の機能であり、実行時ではないため、変数を使用してジェネリック型を判別することはできません。NPEのメモ(を使用Class
)を使用してもコンパイルされません。
Class<?> type = Boolean.class;
// can't do that...
List<type> list = new List<type>();
list.add(true);
2番目のケースでは、タイプが不明なのになぜジェネリックを使用したいのですか?非ジェネリック配列リスト(jdk 5より前に使用)をより適切に使用できます。
List a = new ArrayList();
a.add(object);
このスタイルは引き続き上位バージョンでサポートされており、ジェネリックスタイルでさえコンパイル後にこの形式に変換されます。上記のコードで、抑制できる警告が表示されます。