EnumSet
использует некоторое отражение, чтобы идентифицировать тип своих элементов. (Набор использует "порядковый номер" значений enum
для отслеживания того, включен ли каждый элемент.)
Когда вы создаете EnumSet
с copyOf(Collection)
, он проверяет, является ли коллекция EnumSet
. Если это так, он использует тот же тип, что и исходный набор. В противном случае он пытается вызвать getClass()
для первого элемента в исходной коллекции. Если коллекция пуста, то нет первого элемента и нечего запрашивать его класс. Таким образом, в этом случае происходит сбой («throws IllegalArgumentException
, если c
не является экземпляром EnumSet
и не содержит элементов»).
Чтобы создать пустой EnumSet
, вам нужно самостоятельно определить класс и использовать noneOf()
.
Collection<Test> tests = get(test);
return tests.isEmpty() ? EnumSet.noneOf(Test.class) : EnumSet.copyOf(tests);