Java 如何为枚举类实现equals和hashcode
我有一个接口名类型Java 如何为枚举类实现equals和hashcode,java,enums,hashmap,Java,Enums,Hashmap,我有一个接口名类型 public interface Types { public String getName(); } 两个枚举类扩展了这个接口,如下所示 public enum AlphaTypes implements Types { Alpha("alpha"),Common("common") private String name; private AlphaTypes(String name) {
public interface Types
{
public String getName();
}
两个枚举类扩展了这个接口,如下所示
public enum AlphaTypes implements Types
{
Alpha("alpha"),Common("common")
private String name;
private AlphaTypes(String name)
{
this.name = name;
}
@Override
public String getName()
{
return name;
}
}
public enum BetaTypes implements Types
{
Beta("beta"),Common("common")
private String name;
private BetaTypes(String name)
{
this.name = name;
}
@Override
public String getName()
{
return name;
}
}
要求是有一个以类型为键的映射
如Map代码>
如何实现equals和hashcode,从而使映射键即使对于常见的枚举值也是唯一的?类java.lang.enum
将equals()
和hashcode()
声明为final
,因此,试图覆盖它们时会出现编译器错误
也就是说,上面的示例可以按照您的意愿工作-如果您将AlphaTypes.Common
和BetaTypes.Common
添加到Map
中,您将得到一个包含两个元素的映射:
public static void main( String[] args ) throws Exception
{
Map<Types,Object> map = new HashMap<Types,Object>();
map.put( AlphaTypes.Common , "b" );
map.put( BetaTypes.Common , "b" );
System.out.println( "size=" + map.size());
}
publicstaticvoidmain(字符串[]args)引发异常
{
Map Map=newhashmap();
map.put(AlphaTypes.Common,“b”);
map.put(BetaTypes.Common,“b”);
System.out.println(“size=“+map.size());
}
尺寸=2
干杯,为什么不使用某种映射?您是否尝试过将其与默认实现一起使用?引用相等应该很好,因为它们是enum
s(因此不会有具有相同值的不同实例),而且我看不出为什么默认的hashCode
不够。请记住,enum成员是单例的,所以==可以作为相等性测试。所有enum类都隐式扩展了java.lang.enum,它最终实现了这两个类。equals使用==并且hashCode使用Object.hashCode。尝试在任何枚举中重写它们,您将得到一个编译器错误,可能重复: