如何为枚举类实现equals和hashcode

时间:2014-04-24 07:27:24

标签: 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)
    {
        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<Types,Object> map;

如何实现equals和hashcode,这样即使对于常见的枚举值,映射键也是唯一的?

1 个答案:

答案 0 :(得分:6)

班级java.lang.Enumequals()hashCode()都声明为final,因此您会在尝试覆盖它们时遇到编译错误。

话虽如此,上面的示例可以按照您的意愿运行 - 如果您将AlphaTypes.CommonBetaTypes.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());
}
  

大小= 2

干杯,