我有;

public enum Detailed {
    PASSED, INPROCESS, ERROR1, ERROR2, ERROR3;
}

并需要将其转换为以下内容;
public enum Simple {
    DONE, RUNNING, ERROR;
}

因此,首先PASSED-> DONEINPROCESS-> 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的代码混合在一起。这可能不是一件坏事,这取决于您的系统体系结构。

10-06 11:18