1
public enum TagEnum {
   MALE,FEMALE,//GENDER
   YOUNG,MIDDLE_AGED,OLD//AGE
}

我想用 TagEnum 来描述一个人。MALE 和 FEMALE 是互斥的,年龄的枚举也是如此。

例如,一旦将 MALE 放入 EnumSet,将不会接受 FEMALE。

有这样的EnumSet吗?

==更新==

请注意,性别和年龄都用于描述一个人。如果我有超过 5 个维度,会发生什么?制作 5 个枚举和 5 个单独的引用?

因为我需要一个测试方法来知道是否有人拥有这样的枚举,所以像这样制作 5 个重载方法是多余的:

boolean test(Age age);
boolean test(Gender gender);
boolean test(OtherDimension other);
//What a pity Enum can't be inherited

有没有办法让它更容易?谢谢!

4

2 回答 2

2

不,那里没有。EnumSetSet更一般地说,这不是正确的数据结构。

为什么你认为你首先需要一个Set?如果您想要的只是相互排他性,那么对 a 的单个引用TagEnum就足够了。

于 2015-03-20T03:55:49.750 回答
1

EnumSet不是不可变的Set,它确实有类似addand的方法remove。它Enum在初始化后具有多个值。并且您可以使用初始化addremove其他Enum相同类型的值。此外,初始化an的方式EnumSet是这样的:

EnumSet<TagEnum> all = EnumSet.allOf(TagEnum.class);
EnumSet<TagEnum> none = EnumSet.noneOf(TagEnum.class);
EnumSet<TagEnum> range = EnumSet.range(TagEnum.MALE, TagEnum.FEMALE);
EnumSet<TagEnum> some = EnumSet.of(TagEnum.YOUNG,TagEnum.OLD);

同时,您可以像这样处理 EnumSet:

for(TagEnum a : all){
    System.out.println(a);
}        
if(all.contains(TagEnum.MALE)){
    System.out.println("sure");
}

希望这些对您有所帮助。

于 2015-03-20T06:10:53.380 回答