Java 级联枚举?

标签 java enums

在我的项目中,我有这样的类:

class Statut {
    String satDomain;
    String staCode;
}

但是使用字符串并不是我想要的。它过于宽松,使用常量是不够的。

我想使用枚举但发现一个问题:

class Statut {
    Domain satDomain;
    StatutCode staCode;
}
enum Domain { }
enum StatutCode { }

此解决方案要好得多,但您可以设置不在所选域中的 StatutCode。

您是否在您的项目中找到了解决此类问题的方法?

谢谢你的帮助

弗鲁米尼

最佳答案

实际上对 extraneon 的回答略有改进。

首先定义StatutCode 枚举,然后将EnumSet< StatutCode > 分配给每个Domain 枚举值。然后在 Statut constructor

中验证就非常简单了
enum StatutCode
{
  ONE,
  TWO,
  THREE,
  FOUR
};

enum Domain
{
  DOMAIN_1( EnumSet.of( StatutCode.ONE, StatutCode.TWO ) ),
  ...
  DOMAIN_N( EnumSet.of( StatutCode.TWO, StatutCode.THREE ) );

  private final EnumSet< StatutCode> validStatCodes;

  Domain( EnumSet< StatutCode > validStatCodes )
  {
    this.validStatCodes = validStatCodes;
  }

  public boolean isValidCode ( final StatutCode code )
  {
    return validStatCodes.contains( code );
  }
}

class Statut {
    final Domain staDomain;
    final StatutCode staCode;

    Statut(
      final Domain staDomain,
      final StatutCode staCode
    )
    {
      if ( ! staDomain.isValidCode( staCode ) )
      {
        throw new IllegalArgumentException(
            "Invalid code " + staCode + " for domain " + staDomain
          );
      }

      this.staDomain = staDomain;
      this.staCode = staCode;
    }

}

关于Java 级联枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2668141/

相关文章:

java - 如何从一组Gradle Java任务中分解出一组systemProperty调用?

java - 如何扩展实现接口(interface)的枚举的静态方法?

c++ - 将枚举值分配给整数崩溃程序

OpenGL - GLenum 如何成为无符号 32 位整数?

java - 算术运算符作为枚举?

java - 解析具有未知结构的 JSON 以便与已知结构进行比较的最佳方法?

java - 在Spring应用程序中设置查询超时连接时出现问题

java - 从函数/方法设置 "android:text"值

java - 禁用 Java ImageIO 色度子采样

java - 我应该尝试在 Java 中创建可逆枚举还是有更好的方法?