public enum TagEnum {
MALE,FEMALE,//GENDER
YOUNG,MIDDLE_AGED,OLD//AGE
}
我想用TagEnum来描述一个人。男性和女性是相互排斥的,年龄的枚举也是如此。
例如,一旦您将 MALE 放入 EnumSet,FEMALE 将不被接受。
有这样的枚举集吗?
==更新==
请注意,性别和年龄都用于描述一个人。如果我有超过 5 个维度,会发生什么?要制作 5 个枚举和 5 个单独的引用?
由于我需要一个测试方法来知道是否有人拥有这样的枚举,因此像这样制作 5 个重载方法是多余的:
boolean test(Age age);
boolean test(Gender gender);
boolean test(OtherDimension other);
//What a pity Enum can't be inherited
有没有办法让它变得更容易?谢谢!
不,没有。 EnumSet
,更一般地说Set
不是正确的数据结构。
为什么你认为你首先需要Set
?如果您想要的只是相互排斥,那么对TagEnum
的单个引用就足够了。
EnumSet
不是一个不可变的Set
,它确实有像add
和remove
这样的方法。初始化后,它具有Enum
值的数量。您可以通过初始化add
或remove
相同类型的其他Enum
值。此外,初始化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");
}
希望这些对您有所帮助。