首页 > 解决方案 > 在 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;
    }
}

标签: javaenumsenumset

解决方案


使用不同类型的集合。EnumSet旨在仅保存单一种类的枚举值

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

关键是它非常有效,因为它存储了当前序数值的位掩码——大多数枚举的值少于 64 个,所以就成员变量而言,它基本上只需要Classa 和 a long。(有一个 EnumSet 的私有子类,称为 JumboEnumSet 之类的东西,它处理更大的枚举)。

如果您有多个枚举类型,它无法区分来自具有相同序数的不同枚举的值。


推荐阅读