【问题标题】:Move switch statement to use Enum移动 switch 语句以使用 Enum
【发布时间】:2018-01-12 16:46:43
【问题描述】:

这里是新手。我想将 switch 语句转换为使用枚举。我创建了枚举,在 switch 语句中使用了它,但是我不知道如何将c 传递给它以返回适当的值。

转换方法:

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

我试过但没用的枚举:

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;
}

}

非常感谢您的帮助。

【问题讨论】:

标签: java enums inner-classes enumeration


【解决方案1】:

这样的事情是最简洁的方式——你甚至不需要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"));
}

【讨论】:

  • 这是一个正确的答案。但是,退后一步,从 30,000 英尺处看问题,这是一种使用枚举从一个字符串转换为另一个字符串的解决方案。 HashMap 可能是一个更好的选择。或者让change() 方法接受一个枚举参数并专门使用枚举而不是字符串。
【解决方案2】:

你需要在你的枚举中添加一个查找方法,通过传入一个字符串来返回枚举

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(colorChange.lookup("red"))

【讨论】:

    猜你喜欢
    • 2011-10-11
    • 1970-01-01
    • 2017-02-17
    • 1970-01-01
    • 2021-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-28
    相关资源
    最近更新 更多