移动switch语句以使用Enum

时间:2018-01-12 16:46:44

标签: java enums inner-classes enumeration

新手在这里。我想将switch语句转换为使用枚举。我创建了枚举,在switch语句中使用了它,但后来我无法弄清楚如何将c传入其中以返回适当的值。

转换方法:

public String convert(String c) {
    switch(c) {
        case "red":
            return "purple";
        case "yellow":
            return "orange";
        default:
            return c;
    }
}

Enum我尝试过但没有工作:

public enum colorChange {

RED("purple"),
YELLOW("orange");

private final String color;

private colorChange(String color) {
    this.color = color;
}

public String getcolor() {
    return color;

最终,我要做的是这样的事情:

public String convert(String c) {
switch(c) {
    case RED:
        return RED.getcolor();
    case YELLOW:
        return YELLOW.getcolor();
    default:
        return c;
}

}

非常感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

这样的事情是最干净的方式 - 你甚至不需要switch

public enum ColorChange {

    RED("purple"),
    YELLOW("orange");

    private final String color;

    ColorChange(String color) {
        this.color = color;
    }

    public static String change(String color) {
        return valueOf(color.toUpperCase()).color;
    }
}

public void test(String[] args) {
    System.out.println("red -> "+ColorChange.change("red"));
}

答案 1 :(得分:1)

您需要向Enum添加一个查找方法,以通过传入字符串

来返回枚举
public static colorChange lookup(String color) {
    for (colorChange c : colorChange.values())
        if(c.getcolor().equals(color))
            return c;

    return null;
 }

然后你的转换方法会接受一个枚举而不是一个字符串:

public String convert(colorChange c) {
switch(c) {
    case RED:
        return RED.getcolor();
    case YELLOW:
        return YELLOW.getcolor();
    default:
        return c;
  }
}

当您调用convert方法时,您可以将字符串传递给查找方法

convert(colorChange.lookup("red"))