作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以,我有一个像这样的枚举,
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/
我是一名优秀的程序员,十分优秀!