私はこのような何かをしようとしています:Javaのジェネリックリスト<>
1.アプローチ
Type ty = entityType.getEntityClass(); // could be e.g. String.class
List<ty> list;
2.アプローチ
Class cl = entityType.getEntityClass(); // could be e.g. String.class
List<cl> list;
はしかし、コンパイラは、単純に言います"いいえ"。
ジェネリックタイプ<T>
を設定する方法はありますか。たとえばjava.util.Listを持つことによってのみjava.util.Listの動的String.class
またはfoo.getClass()
?
私は実際にタイプEntityTypeEnum
の特定のパラメータでリストを初期化してやろうとしていますか、それはClass
プロパティ値です。
public enum EntityTypeEnum {
ARTICLE(Article.class),
ORDER(OrderHeader.class),
CUSTOMER(Customer.class),
CUSTOMER_SESSION(CustomerSession.class);
private final Class entityClass;
private EntityTypeEnum(final Class entityClass) {
this.entityClass = entityClass;
}
public Class getEntityClass() {
return entityClass;
}
}
建設的な批判を歓迎します。 ありがとうございました!
追加:(アンディさんのコメントの回答など)
Class cl = String.class;
List<cl> list;
のいずれかに動作していない..is!
List<String> list;
です。
String
とString.class
の違いは何ですか?
などの値を設定する方法があります:あなたは、Javaのジェネリックが可能であるか誤解されている
public enum EntityTypeEnum {
ARTICLE(Article)
..
はありません「しかし、コンパイラは、単純に言います 『』。」それはジェネリックが何のためではないからです。コンパイル時に型の安全性を強制するためのものです。実行時まで型を知らなければ、ジェネリックはあなたを助けません。 –
私はあなたの意見を持っています。コンパイル時にその型がよくわかっているとします:Class cl = String.class;リストリスト; まだコンパイルされませんでした。 –
技術的には、これはコンパイル時定数式ではありません。しかし、単純にこれを行うことはできません。ジェネリックは*変数*に基づくのではなく、変数の*タイプ*に基づくことができます。 –