【发布时间】:2015-03-20 03:52:35
【问题描述】:
public enum TagEnum {
MALE,FEMALE,//GENDER
YOUNG,MIDDLE_AGED,OLD//AGE
}
我想用 TagEnum 来描述一个人。 MALE 和 FEMALE 是互斥的, 那些年龄的枚举也是如此。
例如,一旦将 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? -
这就是所谓的“枚举的单个实例”:-)
-
是否每个
TagEnum都有一个互斥的TagEnum? -
这听起来像是一个架构问题——你真的需要 2 个枚举:一个用于年龄,一个用于性别。这自然会增强您对排他性的需求。
-
您只需将复杂性转移到您的
EnumSet中。与围绕枚举组合的一组特殊规则相比,多个重载将更容易维护。我会选择重载。