java - 如何嵌套枚举

标签 java enums

我有一些需要在服务器端使用的 UI 客户端过滤器(组合框和复选框组):我想使用枚举来识别过滤器类型,并使用其他枚举来识别每个过滤器的选项。

// All UI filters
public enum FilterType {
    AGGREGATION("aggregation"),
    AREA("area"),
    PRODUCTION("production"), 
    DATA_TYPE("datatype"),
    PRODUCER("producer"),
    NETWORK("network"),
    SOURCE("source");

    private String value;

    private FilterType(String value) {
        this.value = value;
    }

    public String getValue() {
        return value;
    }
}

// FilterType.AGGREGATION filter options
public enum AggregationOptionType {
    STANDARD("standard"),
    DTR("dtr"),
    CO("co");

    private String value;

    private AggregationOptionType(String value) {
        this.value = value;
    }

    public String getValue() {
        return value;
    }
}

我想在 FilterType.AGGREGATIONAggregationOptionType 之间创建一个硬链接(hard link),强制通过 FilterType.AGGREGATION.DTR 访问一个选项.

如何将一个枚举“嵌套”在另一个枚举的值中? 是否有其他模式(可能比我的更聪明)可以达到相同的结果?

编辑

澄清:我不需要需要为外部枚举的每个值分配一个公共(public)内部枚举的值。我需要为外部枚举的每个值分配一个完全不同的内部枚举。

最佳答案

您可以将一个枚举放入另一个枚举中,例如:

enum OuterEnum {
  A, B;    
  enum InnerEnum {
    C, D;
  }
}

像这样使用:

class Enumuser {
  OuterEnum.InnerEnum ie = OuterEnum.InnerEnum.C; 
}

当然,这并不是您要找的。 您需要更进一步:

enum OuterEnum {
  A(InnerEnum.C), B(InnerEnum.D);

   private final InnerEnum inner;

   private OuterEnum(InnerEnum inner) { this.inner = inner; }

   public InnerEnum getInner() { return inner; }

  enum InnerEnum {
      C, D;
  }
}

class Enumuser {
  OuterEnum.InnerEnum inner = OuterEnum.A.getInner(); 
}

但是警告的最后一句话:不要因为这种目的而使用枚举。你看,一旦你开始在所有地方编写切换此类枚举的 switch 语句,为了做这个或那个......你可能正在做一些错误的事情。请考虑不要“落入枚举陷阱”。

相反,您应该考虑使用多态性,如图所示here !

关于java - 如何嵌套枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40234844/

相关文章:

regex - Typescript:正则表达式作为枚举值

java - 使用导入的库运行 jar 文件时出现问题?

JAVA:JFrame 变为黑色后的屏幕截图

java - 为什么我无法在导入的模块中使用 Jython 类?

java - Java中的最终字符

C++:是否可以重载 |位于同一类中的两个不同枚举的运算符?

java - 下载照片时遇到问题

objective-c - 升级到 Xcode 7.3 swift 2.2 后,从 swift 调用 obj-c 枚举不起作用

mysql - 无法在 MySQL 中使用 ENUM 变量类型选择没有双引号的行

c# - 如何获取类的枚举属性列表?