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