【问题标题】:store different enum types in enumSet在 enumSet 中存储不同的枚举类型
【发布时间】:2019-04-06 16:41:24
【问题描述】:

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

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

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;
    }
}

【问题讨论】:

  • 使用其他类型的集合。
  • 为什么?我想,枚举集就在这里..
  • EnumSet 旨在仅保存一种枚举值。关键是它非常有效,因为它存储了当前序数值的位掩码。如果您有多个枚举类型,它无法区分来自具有相同序数的不同枚举的值。
  • 哦,没注意到,谢谢!

标签: java enums enumset


【解决方案1】:

使用不同类型的集合。 EnumSet 是designed to hold enum values of a single kind only:

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

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

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

【讨论】:

    猜你喜欢
    • 2021-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-29
    • 1970-01-01
    相关资源
    最近更新 更多