如何将不同的枚举值作为唯一实体添加到集合中?

时间:2015-12-30 13:53:13

标签: java enums set equals

如何防止将同一枚举类型的不同枚举值添加到集合中?

例如,我制作了一个尺寸枚举:

public enum Size {
    SMALL, MEDIUM, LARGE;
}

并将两个不同的值添加到该类型的Enum中:

public class AttributesTestDrive {
    public static void main(String[] args) {
        Set<Size> sizes = new TreeSet<>();
        sizes.add(Size.LARGE);
        sizes.add(Size.MEDIUM);
        sizes.stream().forEach(System.out::println);
    }
}

如何在Enum中覆盖boolean equals(Object obj)?或者你还会做些什么来解决这个问题?

P.S。据我所知,枚举是Java中的类。

1 个答案:

答案 0 :(得分:2)

地图而不是Set?

Map <Class,Attribute> attributes;

应该做的工作。你可以有一个尺寸:

attributes.put(Size.class, Size.LARGE);

如果你把它放到一个班级,你甚至可以在检索上做一些魔术:

public <T> T get (T defaultValue) {
  if (attributes.containsKey (defaultValue.getClass ())) {
     return (T) attributes.get (defaultValue.getClass ());
   } else  {
     return defaultValue;
   }
}