Проверка, сопоставлены ли все значения перечисления? - PullRequest
2 голосов
/ 07 февраля 2009

Есть ли в стандартных библиотеках java удобный метод для проверки, сопоставлены ли все возможные ключи в EnumMap значению?

Я могу написать свой собственный метод, например:

public static <T extends Enum<T>> boolean areAllValuesMapped(EnumMap<T, ?> map, Class<T> enumClass)
{
    return map.keySet().equals(EnumSet.allOf(enumClass));
}

Но затем я повторяю параметр Class (уже заданный в конструкторе EnumMap), а также создаю одноразовые объекты KeySet и EnumSet. EnumMap должен иметь достаточно информации для эффективного выполнения этой операции в качестве внутренней операции.

1 Ответ

5 голосов
/ 07 февраля 2009

Нет встроенного способа сделать это, который я могу найти в EnumMap (и я проверил исходный код, чтобы убедиться). Тем не менее, вот немного более быстрый метод:

public static <T extends Enum<T>> boolean areAllValuesMapped(EnumMap<T,?> map, Class<T> enumClass) {
    return map.size() == enumClass.getEnumConstants().length;
}

Следует отметить, что EnumMap.keySet() не возвращает EnumSet; если это так, то вызов equals(), который вы используете, будет простым сравнением longs. Как таковой, он должен использовать итератор и последовательно проверять каждую константу перечисления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...