Взаимоисключающий Enum, управляемый EnumSet

1
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

Есть ли способ сделать это проще? Благодарю!

  • 0
    Так все ли элементы этого перечисления эксклюзивны? Вы ищете EnumSet который не может содержать более одного элемента?
  • 1
    Это называется "единственный экземпляр перечисления" :-)
Показать ещё 8 комментариев
Теги:
enumset

2 ответа

2

Нет, нет. EnumSet и Set целом, это не правильная структура данных для этого.

Почему, по-вашему, вам нужен Set в первую очередь? Если все, что вам нужно, - это взаимная эксклюзивность, достаточно одной ссылки на TagEnum.

  • 0
    К сожалению, НЕ все из них являются эксклюзивными. Я обновил вопрос.
1

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");
}

Надеюсь, они вам помогут.

  • 1
    EnumSet не является неизменным Set , и он ДОЛЖЕН иметь методы, такие как add и remove .
  • 0
    @ MattBall @ Андерсон, проверь здесь .
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню