如何为枚举类实现equals和hashcode

Vin*_*gla 3 java enums hashmap

我有一个接口名称类型

public interface Types
{       
    public String getName();    
}
Run Code Online (Sandbox Code Playgroud)

两个枚举类正在扩展这个界面

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;
    }   
}
Run Code Online (Sandbox Code Playgroud)

要求是有一个地图,类型为关键字 Map<Types,Object> map;

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

And*_*rup 6

该类java.lang.Enum声明both equals()hashCode()as 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());
}
Run Code Online (Sandbox Code Playgroud)

大小= 2

干杯,