[英]How to save enum class in a HashMap?
Let us say we have following enums:假设我们有以下枚举:
public enum AnimalImages {
TIGER,BEAR,WOLF;
}
public enum CarImages {
BMW,VW,AUDI;
}
Now I want to save these enum classes in a HashMap:现在我想将这些枚举类保存在 HashMap 中:
Map<String,Enum<?>> enumMap=new HashMap<String,Enum<?>>();
enumMap.put("AnimalImages",???????);
What I should enter instead of the question marks?我应该输入什么而不是问号?
To explicitly answer to your question, you have to put the enum value as this:要明确回答您的问题,您必须将枚举值设置为:
Map<String,Enum<?>> enumMap=new HashMap<String,Enum<?>>();
enumMap.put("AnimalImages", AnimalImages.TIGER);
However, if you want to put all the value belonging to an enum, then you could leverage values()
method and also change your map to Map<String,Enum<?>[]>
so you can use this:但是,如果您想放置属于枚举的所有值,那么您可以利用
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());
Another approach, with a shorten signature can be something like this:另一种使用缩短签名的方法可能是这样的:
Map<String, Object> enumMap = new HashMap<String,Object>();
enumMap.put("AnimalImages", AnimalImages.values());
enumMap.put("CarImages", CarImages.values());
Another way that bali182 pointed in this comment, you could use: bali182在此评论中指出的另一种方式,您可以使用:
Map<String, Collection<? extends Enum<?>>> enumMap = new HashMap<>();
enumMap.put("AnimalImages", Arrays.asList(AnimalImages.values()));
enumMap.put("CarImages", Arrays.asList(AnimalImages.values()));
To answer your question:回答你的问题:
enumMap.put("AnimalImages", AnimalImages.WOLF);
enumMap.put("Cars", CarImages.AUDI);
But you can also do但你也可以这样做
Map<String, AnimalImages> enumMap = new HashMap<String, AnimalImages>();
And this way enumMap.get("AnimalImages")
, and this way you won't have to type check and cast it.这样
enumMap.get("AnimalImages")
,这样你就不必键入检查并转换它。
If the requirement is to create a Map
that contains all values of a given enum
, I would use a mapping of String
keys into EnumSet
values:如果需要创建一个包含给定
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
is a specialized Set
implementation, which is represented internally as a bit vector. EnumSet
是一个专门的Set
实现,它在内部表示为一个位向量。 Its sole purpose is to provide an efficient and easy way to store enum
s.它的唯一目的是提供一种高效且简单的方法来存储
enum
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.