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

TagEnum を使用して Person を記述したいと考えています。MALE と FEMALE は相互に排他的であり、年齢の列挙も同様です。

たとえば、EnumSet に MALE を入れると、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ではなく、 や などのメソッドがaddありremoveます。初期化後の値の数がありEnumます。また、初期化で同じタイプの他の値を指定することもできaddます。また、 an を初期化する方法は次のとおりです。removeEnumEnumSet

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 に答える