хранить различные типы перечислений в enumSet - PullRequest
0 голосов
/ 06 апреля 2019

Я хочу хранить различные типы перечислений в одном перечислении.

Это правильный (кратчайший) способ?

public enum MyEnums {
    all(EnumSet.of(Color.red, Shape.round));

    MyEnums(EnumSet<? extends Enum<?>> keys) {
        this.keys = keys;
    }

    private final Set<? extends Enum<?>> keys;

    public Set<? extends Enum<?>> getKeys() {
        return keys;
    }
}

1 Ответ

4 голосов
/ 06 апреля 2019

Используйте другой вид набора. EnumSet - это , предназначенный для хранения значений перечисления только одного вида :

Все элементы в наборе перечислений должны принадлежать одному типу перечисления

Суть в том, что он очень эффективен, потому что хранит битовую маску текущих порядковых значений - большинство перечислений имеют менее 64 значений, поэтому все, что ему в основном нужно с точки зрения переменных-членов, это Class и long. (Существует частный подкласс EnumSet, называемый чем-то вроде JumboEnumSet, который обрабатывает большие перечисления).

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

...