суббота, марта 05, 2011

Маленькие хитрости с EnumSet

Задача.
Дано: в метод передан EnumSet. Какой Enum используется - неизвестно.

public <E extends Enum<E>> void showEnumList(EnumSet<E> set) {
 // .... ???
}

Надо: получить список всех полей исходного Enum'а и проставить флажки напротив тех элементов, которые есть в исходном EnumSet.

Решение:
Самое "сложное" - это получить все элементы Enum'а. Поэтому сделать вспомогательный метод никогда не помешает:

public class EnumSetUtils {
  public static <E extends Enum<E>> EnumSet<E> getAllValues(EnumSet<E> set) {
    EnumSet<E> enumSet = EnumSet.complementOf(set);
    enumSet.addAll(set);
    return enumSet;
  }
}


Ну а теперь можно приступать и выполнению задания:

public <E extends Enum<E>> void showEnumList(EnumSet<E> set) {
  for (E e : EnumSetUtils.getAllValues(set)) {
    System.out.println(e + " " + (set.contains(e) ? "+" : "-" ));
  }
}


Задача решена. Всем спасибо.

Комментариев нет: