[英]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
有沒有辦法讓它更容易? 謝謝!
不,那里沒有。 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");
}
希望這些能幫到你。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.