繁体   English   中英

由EnumSet控制的互斥Enum

[英]Mutually exclusive Enum controlled by a EnumSet

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

我想用TagEnum来形容一个人。 男性和女性是相互排斥的,年龄的枚举也是如此。

例如,一旦将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

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

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

为什么你认为你需要一个Set摆在首位? 如果你想要的只是互斥,那么对TagEnum的单一引用就足够了。

EnumSet不是一个不可变的Set ,它有像addremove这样的方法。 初始化后它具有多个Enum值。 您可以使用初始化addremove相同类型的其他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");
}

希望这些能帮到你。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM