我試圖做這樣的事情: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動態只有通過具有例如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;
..是不是無論是工作!
List<String> list;
..works,當然。
那麼String
和String.class
之間有什麼區別?
還是有辦法設置的值,如:
public enum EntityTypeEnum {
ARTICLE(Article)
..
「不過,編譯器只是說‘不’。」因爲這不是泛型。它們用於在編譯時強制執行類型安全;如果您直到運行時才知道類型,泛型不能幫助您。 –
我明白了你的觀點。想象一下這個類型在編譯時是衆所周知的:Class cl = String.class;列表列表; 它仍然不會被編譯。 –
從技術上講,這不是一個編譯時常量表達式。但是你不能這樣做:泛型不能基於*變量*,而是變量的*類型*。 –