在enumSet中存储不同的枚举类型

时间:2019-04-06 16:41:24

标签: java enums enumset

我想在一个枚举中存储不同的枚举类型。

这是正确(最短)的方法吗?

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 个答案:

答案 0 :(得分:4)

使用另一种设置。 EnumSet为designed to hold enum values of a single kind only

  

枚举集中的所有元素都必须来自单个枚举类型

重点是它非常有效,因为它存储了当前序数值的位掩码-大多数枚举数都少于64个值,因此,就成员变量而言,它基本上所需的全部是Class和a long。 (有一个EnumSet的私有子类,称为JumboEnumSet之类,可以处理较大的枚举。)

如果您有多种枚举类型,则无法区分具有相同序数的不同枚举值。