[英]How to save enum class in a HashMap?
假設我們有以下枚舉:
public enum AnimalImages {
TIGER,BEAR,WOLF;
}
public enum CarImages {
BMW,VW,AUDI;
}
現在我想將這些枚舉類保存在 HashMap 中:
Map<String,Enum<?>> enumMap=new HashMap<String,Enum<?>>();
enumMap.put("AnimalImages",???????);
我應該輸入什么而不是問號?
要明確回答您的問題,您必須將枚舉值設置為:
Map<String,Enum<?>> enumMap=new HashMap<String,Enum<?>>();
enumMap.put("AnimalImages", AnimalImages.TIGER);
但是,如果您想放置屬於枚舉的所有值,那么您可以利用values()
方法並將您的地圖更改為Map<String,Enum<?>[]>
以便您可以使用:
Map<String,Enum<?>[]> enumMap=new HashMap<String,Enum<?>[]>(); // Note Enum<?>[] array
enumMap.put("AnimalImages", AnimalImages.values());
enumMap.put("CarImages", CarImages.values());
另一種使用縮短簽名的方法可能是這樣的:
Map<String, Object> enumMap = new HashMap<String,Object>();
enumMap.put("AnimalImages", AnimalImages.values());
enumMap.put("CarImages", CarImages.values());
bali182在此評論中指出的另一種方式,您可以使用:
Map<String, Collection<? extends Enum<?>>> enumMap = new HashMap<>();
enumMap.put("AnimalImages", Arrays.asList(AnimalImages.values()));
enumMap.put("CarImages", Arrays.asList(AnimalImages.values()));
回答你的問題:
enumMap.put("AnimalImages", AnimalImages.WOLF);
enumMap.put("Cars", CarImages.AUDI);
但你也可以這樣做
Map<String, AnimalImages> enumMap = new HashMap<String, AnimalImages>();
這樣enumMap.get("AnimalImages")
,這樣你就不必鍵入檢查並轉換它。
如果需要創建一個包含給定enum
所有值的Map
,我將使用String
鍵到EnumSet
值的映射:
Map<String, EnumSet<?>> enumMap = new HashMap<String, EnumSet<?>>();
enumMap.put("AnimalImages", EnumSet.allOf(AnimalImages.class));
enumMap.put("CarImages", EnumSet.allOf(CarImages.class));
for (Map.Entry<String, EnumSet<?>> e : enumMap.entrySet()) {
System.out.println(String.format("key: [%s], values: %s",
e.getKey(), e.getValue().toString()));
}
EnumSet
是一個專門的Set
實現,它在內部表示為一個位向量。 它的唯一目的是提供一種高效且簡單的方法來存儲enum
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.