I have an interface name Types
public interface Types
{
public String getName();
}
Two enum classes are extending this interface like
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;
}
}
The requirement is have a map which takes Types as key
like Map<Types,Object> map;
How to implement equals and hashcode, such that the map keys are unique even for common enum values?
The class java.lang.Enum declare both equals() and hashCode() as final, thus you'll get compiler errors trying to override them.
That being said, your example above works as you desire - if you add AlphaTypes.Common and BetaTypes.Common to a Map you'll get a map with two elements:
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());
}
size=2
Cheers,
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With