我有;
public enum Detailed {
PASSED, INPROCESS, ERROR1, ERROR2, ERROR3;
}
并需要将其转换为以下内容;
public enum Simple {
DONE, RUNNING, ERROR;
}
因此,首先
PASSED
-> DONE
和INPROCESS
-> RUNNING
,但是所有错误都应该是:ERROR
。显然可以为所有值编写案例,但是可能有更好的解决方案? 最佳答案
一种方法是在asSimple()
枚举中定义方法Detailed
:
public enum Detailed {
PASSED {
@Override
Simple asSimple() {
return DONE;
}
},
INPROCESS {
@Override
Simple asSimple() {
return RUNNING;
}
},
ERROR1,
ERROR2,
ERROR3;
public Simple asSimple() {
return Simple.ERROR; // default mapping
}
}
然后,您可以在想要进行映射时简单地调用该方法:
Detailed code = . . .
Simple simpleCode = code.asSimple();
它的优点是将映射的知识与
Detailed
枚举(可能属于该枚举)一起使用。它的缺点是将Simple
的知识与Detailed
的代码混合在一起。这可能不是一件坏事,这取决于您的系统体系结构。