我有一个接口名称类型
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,这样即使对于常见的枚举值,映射键也是唯一的?
答案 0 :(得分:6)
班级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());
}
大小= 2
干杯,