簡體   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