我有一个产品状态枚举,它包含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;
}