gpt4 book ai didi

java - 调用枚举的抽象方法

转载 作者:行者123 更新时间:2023-12-01 17:39:41 25 4
gpt4 key购买 nike

所以,我有一个像这样的枚举,

public enum PlanProcessor { 
A(1){
@Override
void processPlan(...){
// logicA
}

},
B(2){
@Override
void processPlan(...){
// logicB
}

};

abstract void processPlan(...);

private int code;

public static PlanProcessor valueOf(int code) {
for (PlanProcessor type : values()) {
if (type.code == code) {
return type;
}
}
throw new IllegalArgumentException("No enum const " + code);
}
}

现在在服务类中,

void execute(int classId) {
PlanProcessor p = null;
switch(PlanProcessor.valueOf(classId)){
case A: {
p = PlanProcessor.A;
break;
}
case B: {
p = PlanProcessor.B;
break;
}
}

p.processPlan(...);
}

现在,这里一切正常。但我想知道,是否有比使用 switch() 更好的方法来为 A、B、C 调用 processPlan()?

如果您这样做,请告诉我。谢谢。

最佳答案

您的 valueOf(int) 方法已返回 PlanProcessor 的实例。然后,您打开返回的常量,其中每个案例都分配 p...与为该案例定义的常量相同。换句话说,你的 switch 语句是完全多余的。如果将 switch 语句的选择器表达式提取到变量中,可能会更容易看出:

void execute(int classId) {
PlanProcessor p = null;

PlanProcessor temp = PlanProcessor.valueOf(classId);
switch (temp) {
case A: // case for PlanProcessor.A
p = PlanProcessor.A; // equivalent to "p = temp"
break;
case B: // case for PlanProcessor.B
p = PlanProcessor.B; // equivalent to "p = temp"
break;
}

p.processPlan(...);
}

上面可以简化为:

void execute(int classId) {
PlanProcessor p = PlanProcessor.valueOf(classId);
p.processPlan(...);
}

如果您只需要 PlanProcessor 常量来调用 processPlan,则可以进一步简化:

void execute(int classId) {
PlanProcessor.valueOf(classId).processPlan(...);
}

关于java - 调用枚举的抽象方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60976965/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com