[英]EnumMap and Java Generics
假設我有兩個枚舉:
enum MyEnum {A, B, C};
enum YourEnum {D, E, F};
和兩個非常相似的類:
class MyRow {
EnumMap<MyEnum, Object> map;
}
class YourRow {
EnumMap<YourEnum, Object> map;
}
有沒有辦法做這樣的事情呢?
class Row<T implements Enum> {
EnumMap<T, Object> map;
}
這樣我可以說Row<MyEnum>
或Row<YourEnum>
嗎? 我只是不想為每個這些特定的枚舉定義一個新的Row類(我有幾十個)。
從您的示例看來,您可能正在尋找類似
class Row<T extends Enum<T>> {
EnumMap<T, Object> map;
}
您可以使用此類,例如
Row<MyEnum> row = new Row<>();
row.map.put(MyEnum.A, "foo");//OK
//row.map.put(YourEnum.D, "bar");// Error, `put` from this reference
// is meant to handle `MyEnum`
在Row類中,似乎沒有讓我以標准方式遍歷值:
for (T col : T.values())
T
是泛型類型, 在運行時將其擦除為Object
而Object沒有values()
方法。 也許您應該考慮包括Class<T>
字段,該字段將在運行時存儲您正使用的Enum的信息。 此類具有getEnumConstants()
方法,該方法類似於values()
方法。
所以你的代碼看起來像
class Row<T extends Enum<T>> {
EnumMap<T, Object> map;
Class<T> enumType;
public Row(Class<T> enumType){
this.enumType = enumType;
}
void showEnums(){
for (T col : enumType.getEnumConstants())
System.out.println(col);
}
}
可以用這種方式
Row<MyEnum> row = new Row<>(MyEnum.class);
row.showEnums();
請嘗試這樣
public class Row<T extends Enum<T>> {
EnumMap<T, Object> objs;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.