一种方法是在您的详细枚举中定义一个方法asSimple():
public enum Detailed {
PASSED {
@Override
Simple asSimple() {
return PASSED;
}
},
INPROCESS {
@Override
Simple asSimple() {
return RUNNING;
}
},
ERROR1,
ERROR2,
ERROR3;
public Simple asSimple() {
return Simple.ERROR; // default mapping
}
}
然后,您可以在想要进行映射时简单地调用该方法:
Detailed code = . . .
Simple simpleCode = code.asSimple();
它具有将映射知识与详细枚举(可能属于它)放在一起的优点.它的缺点是将Simple的知识与详细的代码混合在一起.根据您的系统架构,这可能是也可能不是坏事.