java - 在 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;
}
}
解决方案
使用不同类型的集合。EnumSet旨在仅保存单一种类的枚举值:
枚举集中的所有元素必须来自单个枚举类型
关键是它非常有效,因为它存储了当前序数值的位掩码——大多数枚举的值少于 64 个,所以就成员变量而言,它基本上只需要Class
a 和 a long
。(有一个 EnumSet 的私有子类,称为 JumboEnumSet 之类的东西,它处理更大的枚举)。
如果您有多个枚举类型,它无法区分来自具有相同序数的不同枚举的值。
推荐阅读
- android - 删除应用意图不适用于 android pie
- react-native - React Navigation MaterialTopTabNavigator - 指示器没有遵循自定义标签栏宽度
- android - 如何在 Flutter 中使 DropDownButton 项目窗口四舍五入?
- python - 将字符串与增量编号连接起来
- html - 如何让导航菜单在移动设备上折叠而不在桌面上折叠?
- php - 如何删除实体关系(Symfony 4)?
- python - 单行 for 循环构建具有多个值的字典列表
- unity3d - Vector2.MoveTowards -- 移动到目标位置等
- sql - 如何加入多个不均匀的视图
- swift - 在 Swift 中使用特殊字符转义正则表达式