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
и Set
целом, это не правильная структура данных для этого.
Почему, по-вашему, вам нужен Set
в первую очередь? Если все, что вам нужно, - это взаимная эксклюзивность, достаточно одной ссылки на TagEnum
.
EnumSet
не является неизменяемым Set
, и у него есть методы, такие как add
и remove
. После инициализации он имеет числа значений Enum
. И вы можете add
или remove
другие значения 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");
}
Надеюсь, они вам помогут.
EnumSet
не является неизменным Set
, и он ДОЛЖЕН иметь методы, такие как add
и remove
.
EnumSet
который не может содержать более одного элемента?