Java 由枚举集控制的互斥枚举

Java 由枚举集控制的互斥枚举,java,enumset,Java,Enumset,我想用TagEnum来描述一个人。 男性和女性是相互排斥的, 年龄的枚举也是如此 例如,一旦将男性放入枚举集中,女性将不被接受 有这样一套吗 ==更新== 注意,性别和年龄都用来描述一个人。如果我有超过5个维度,会发生什么?要创建5个枚举和5个单独的引用 因为我需要一个测试方法来知道是否有人拥有这样的枚举,所以像这样创建5个重载方法是多余的: public enum TagEnum { MALE,FEMALE,//GENDER YOUNG,MIDDLE_AGED,OLD//AGE }

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

例如,一旦将男性放入枚举集中,女性将不被接受

有这样一套吗

==更新==

注意,性别和年龄都用来描述一个人。如果我有超过5个维度,会发生什么?要创建5个枚举和5个单独的引用

因为我需要一个测试方法来知道是否有人拥有这样的枚举,所以像这样创建5个重载方法是多余的:

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

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

不,没有
EnumSet
Set
通常不是用于此目的的正确数据结构


你为什么认为你首先需要一个
集合
?如果您想要的只是相互排斥,只需引用一个
TagEnum
就足够了。

EnumSet
不是一个不变的
Set
,它确实有
add
remove
等方法。初始化后,它有许多
Enum
值。您可以
添加
删除
其他
枚举
与初始化相同类型的值。 此外,初始化
EnumSet
的方法如下:

boolean test(Age age);
boolean test(Gender gender);
boolean test(OtherDimension other);
//What a pity Enum can't be inherited
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
?这称为“枚举的单个实例”:-)是否每个
TagEnum
都有一个相互排斥的
TagEnum
?这听起来像是一个架构问题-您确实需要两个枚举:一个用于年龄,一个用于性别。这自然会加强您对排他性的需求。您只需将复杂性转移到您的
枚举集
。与围绕枚举组合的一组特殊规则相比,维护多个重载要简单得多。我会选择重载。对不起,不是所有重载都是独占的。我已经更新了这个问题。
EnumSet
不是一个不变的
Set
,它确实有
add
remove
等方法@MattBall@Anderson检查。@SilentKnight我们不会读普通话。这是我的建议。EnumSet实现了
Set
,因此它当然有方法
add
remove
。它们是实现
Set
@Anderson@ErwinBolwidt Hahaha所必需的,当我意识到我提供了一个链接到中文网页的Url时,请感到抱歉。您是对的,我想我错过了从接口java.util.Set继承的
方法。
for(TagEnum a : all){
    System.out.println(a);
}        
if(all.contains(TagEnum.MALE)){
    System.out.println("sure");
}