java - Java中逻辑复杂的EnumSet

标签 java oop validation enums

假设我有一个枚举:

enum EnumDemo{
 A1,
 A2,
 A3,

 B1,
 B2,
 B3,

 C1,
 C2,
 C3
}

我应该使用什么方法来创建可以包含多个 EnumDemo 元素的枚举集,但所有元素都应该来自一组,例如:

{A1, B2, C1}、{B1, C2},但不是 {A1, A3, B1, C1}

任何想法都值得赞赏:)

最佳答案

您可以保留其所属组的每个枚举元素 ID。并根据此 id 创建枚举组:

enum EnumDemo{
 A1(0),
 A2(0),
 A3(0),

 B1(1),
 B2(1),
 B3(1),

 C1(2),
 C2(2),
 C3(2);

 private int groupId;

 private EnumDemo(int groupId) {
   this.groupId = groupId;
 }

 public static Set<EnumDemo> getGroup(int groupId) {
    Set<EnumDemo> group = EnumSet.noneOf(EnumDemo.class);
    for (EnumDemo value : values()) {
      if (value.groupId == groupId) {
        group.add(value);
      }
    }
    return group;
 }
}

如果组是静态的并且不随时间变化,则此方法很好。您还可以创建像 Group 这样的枚举,并使用它代替 int 作为 id。您还可以在应用程序中动态更改元素的groupId,但我不确定这是个好方法。

关于java - Java中逻辑复杂的EnumSet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13581862/

相关文章:

java - 如何使用 Spring PropertyPlaceholderConfigurer 从另一个属性文件调用属性文件?

java - jPanel 调整大小后 jScrollPane 滚动消失

c# - 类如何从自身的参数化版本继承?

java - OOP 设计以两种方式避免对象另一个对象

php - (Laravel) 如何从用户模型中获取验证错误?

java - 如何在 liquibase 开始工作之前在 Postgres DB 中创建模式?

java - 在 IntelliJ 中编辑非项目文件

通配符、基类和子类的 Java 泛型问题

javascript - 从 javascript 验证特定的验证组

asp.net-mvc - 如何在 MVC 中更改由 @Html 帮助程序生成的 'data-val-number' 消息验证