java - 枚举可以是两个阶段的一部分吗?

标签 java enums

我有一个产品状态枚举,它包含 5 个状态,我需要 2 个枚举处于第一阶段,其他 3 个处于第二阶段,这可能吗?怎么办?

我尝试做另一个类并从枚举扩展,但这是不可能的,因为枚举是 final

public enum StatusEnum {
 NEW,PROCESS,COOKING, DELIVERED, CANCELLED
}

if (Product p instance of StageOne){
   p.setStatusEnum(COOKING);
} else {
   throw new Exception("e");
}

我需要这个,因为如果状态枚举仅处于第一阶段,您可以取消产品

最佳答案

枚举可以像常规类一样具有字段和方法(但确保它们不可变通常是一个很好的主意,即创建后没有任何字段可以更改):

public enum StatusStage {
  STAGE1,
  STAGE2
}

public enum StatusEnum
  NEW(StatusStage.STAGE1),
  PROCESS(StatusStage.STAGE1),
  COOKING(StatusStage.STAGE1),
  DELIVERED(StatusStage.STAGE2),
  CANCELLED(StatusStage.STAGE2);

  public final StatusStage stage;

  private StatusEnum(final StatusStage stage) {
    this.stage = stage;
  }
}

您甚至可以添加这样的方法:

public boolean canFrobnicate() {
  return this.stage != StatusStage.STAGE2;
}

关于java - 枚举可以是两个阶段的一部分吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58170356/

相关文章:

c++ - 与常规枚举相比,C++ 枚举结构的大小是否更大?

java - 设置按下 Tab 时 JComboBox 中的插入符位置

Java 空行为

java - Android 中的数据库访问

java - 如何支持相同的屏幕尺寸但不同的 dpi?

java - 您可以在 java 6 中使用带有枚举列表的 switch 语句吗?

c# 枚举函数参数

Java String的split方法忽略空子串

python - 使用FunctionalAPI 时如何装饰我的枚举?

c++ - 为嵌套枚举类声明友元插入运算符(运算符<<)