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

我尝试做另外一堂课,并从枚举扩展,但这不可能,因为枚举是决赛

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;
}

10-06 13:23