2015-03-20 3 views
1
public enum TagEnum { 
    MALE,FEMALE,//GENDER 
    YOUNG,MIDDLE_AGED,OLD//AGE 
} 

Я хочу использовать TagEnum для описания Лица. MALE и FEMALE являются взаимоисключающими, также перечислены для возраста.Взаимное исключение Enum, управляемое EnumSet

Например, как только вы помещаете 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

Это называется «единственным экземпляром перечисления» :-) –

+0

Есть ли у каждого 'TagEnum' один взаимоисключающий' TagEnum'? –

ответ

2

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

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

+0

Извините, НЕ все из них являются эксклюзивными. Я обновил вопрос. – Anderson

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'. – Anderson

+0

@ MattBall @ Anderson check [здесь] (http://man.lupaworld.com/content/develop/JDK_6.0_API_html_zh_CN/html/zh_CN/api/java/util/class-use/EnumSet.html). – SilentKnight

+0

@SilentKnight Мы не можем читать мандарин. Вот [Javadoc на английском языке] (http://docs.oracle.com/javase/7/docs/api/java/util/EnumSet.html). EnumSet реализует 'Set', поэтому, конечно, у него есть методы' add' и 'remove'. Они необходимы для любой реализации 'Set'. –

 Смежные вопросы

  • Нет связанных вопросов^_^