java - 参数化 Java 枚举

标签 java enums enumeration generic-collections

如何在 Java 中参数化一个或多个 enum 值?

我有 3 个非常相似的 enum: ActiveStateGreenRed, ActiveStateGreenOrangeActiveStateGreenYellow

如何制作“通用”enum(我们称之为ActiveState)和“继承”enum:

ActiveStateGreenRed = ActiveState(STATE_COLOR.RED)

ActiveStateGreenOrange = ActiveState(STATE_COLOR.ORANGE)

public enum ActiveStateGreenRed {
    INACTIVE(false, STATE_COLOR.RED), //the only difference between enums
    ACTIVE(true, STATE_COLOR.GREEN);

    private final Boolean value;
    private final STATE_COLOR color;

    private ActiveStateGreenRed(Boolean value, STATE_COLOR color) {
        this.value = value;
        this.color = color;
    }

    public Boolean toValue() {
        return value;
    }

    public STATE_COLOR toColor() {
        return color;
    }
}

最佳答案

enum 无法继承。你可以做类似的事情:

public enum ActiveState {
  INACTIVE_RED(false, STATE_COLOR.RED), //the only difference between enums
  ACTIVE_RED(true, STATE_COLOR.RED),

  INACTIVE_GREEN(false, STATE_COLOR.GREEN),
  ACTIVE_GREEN(true, STATE_COLOR.GREEN);

  ...
}

或者,采用“经典”预枚举方式:

public final class ActiveState {

  public final static ActiveState ACTIVE_RED = new ActiveState( true, STATE_COLOR.RED );

  public final static ActiveState ACTIVE_GREEN = new ActiveState( true, STATE_COLOR.GREEN );

  ...

  private final Boolean value;
  private final STATE_COLOR color;

  private ActiveState(Boolean value, STATE_COLOR color) {
    this.value = value;
    this.color = color;
  }

}

一般来说,具有(包)私有(private)构造函数(仅提供预定义的常量实例)的类可以很像枚举。并且您可以使用这些类拥有继承层次结构。

关于java - 参数化 Java 枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31921887/

相关文章:

java - 在 Java 中读取 PNG 文件并保留正确的格式

java - Spring jdbc模板内存泄漏在非常基本的应用程序中

java - 如何在java中打开所有以特定前缀开头的文件?

c++ - "Where"这个重载运算符是否接受 "out"?

java - EMF eclipse : enumeration with custom fields (properties)

c++ - 枚举故障 : redeclared as different kind of symbol

linux - Linux上PCIe的重枚举和热插拔

java - 依赖 CORS 处理 Java EE 7 Server API 中未捕获的异常

iOS - 如何声明类型未知的 Swift 枚举属性?

c++ - 如何索引实体中基本组件列表中的所有派生组件