我有一个枚举类如下。
public enum Item {
COKE("Coke", 25), PEPSI("Pepsi", 35), SODA("Soda", 45);
private String name;
private int price;
private Item(String name, int price) {
this.name = name;
this.price = price;
}
public String getName() {
return name;
}
public long getPrice() {
return price;
}
}
和一个定义如下的hashmap
private Map<Item, Integer> inventory = new HashMap<Item, Integer>();
我是否需要在Item
和inventory.put()
的枚举inventory.get()
类中覆盖哈希码和等号才能正常工作?如果没有,为什么?
答案 0 :(得分:6)
即使您愿意,也不能,因为这些方法在枚举中为final
。
但是,不要将HashMap
与枚举密钥类型一起使用:使用专用于枚举密钥的EnumMap
,并且不使用hashCode
或equals
(它实际上使用ordinal
)。
修改:在阅读What is the reason behind Enum.hashCode后,我注意到hashCode
和equals
的实施实际上来自Object
。但是这些 是合理的,因为枚举值不具有实例性。
如果您无法创建枚举值的新实例,则使用这些默认值没有问题: