簡體   English   中英

如何在HashMap中保存枚舉類?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM