如何匹配枚举对象及其关联的常量值?

bax*_*ear -1 java enums

我创建了这个枚举:

public enum CoffeeSorts {
    Coffee("Kaffee"), Espresso("Espresso"), Mocca("Mocca"), Cappuccino(
            "Cappuccino"), LatteMacchiato("Latte Macchiato"), DoubleEspresso(
            "doppelter Espresso");

    private final String stringValue;

    private CoffeeSorts(final String s) {
        stringValue = s;
    }

    public String toString() {
        return stringValue;
    }
}
Run Code Online (Sandbox Code Playgroud)

我尝试了以下方式来使用它

public ACoffee createCoffee(String type) {

        switch (type) {
        case CoffeeSorts.Cappuccino :
            try {
                return new ChocolateSprincles(new Cream(new Coffee()));
            } catch (Exception e) {}
            return null;
            break;
        case CoffeeSorts.LatteMacchiato :
            try {
                return new ...
            }
        .
        .
        .
    }
Run Code Online (Sandbox Code Playgroud)

它只给我一个错误,说"无法从CoffeeSorts转换为String".你能告诉我我做错了什么吗?

Jon*_*eet 5

你的type变量是String的,但你要指定它们CoffeeSort的值.您需要将其转换StringCoffeeSort第一个,或更改签名.

例如:

public ACoffee createCoffee(CoffeeSort type) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

要么

public ACoffee createCoffee(String typeName) {
    CoffeeSort type = CoffeeSort.valueOf(typeName);
    ...
}
Run Code Online (Sandbox Code Playgroud)

另请注意,您不能break;return声明之后,因为它是无法访问的代码.(我希望你的异常处理不是那样的,或者...)

最后,考虑完全改变你的代码,把一个createCoffee方法放在枚举本身.那么你根本不需要switch语句.您可以将其设置为在每个枚举值中重写的抽象方法.

public enum CoffeeSort {
    Coffee("Kaffee") {
        @Override public ACoffee createCoffee() {
           ...
        }
    },
    Espresso("Espresso") { ... },
    Mocca("Mocca") { ... },
    Cappuccino("Cappuccino") { ... },
    LatteMacchiato("Latte Macchiato") { ... },
    DoubleEspresso("doppelter Espresso") { ... };

    private final String stringValue;

    private CoffeeSorts(final String s) {
        stringValue = s;
    }

    @Override
    public String toString() {
        return stringValue;
    }

    public abstract ACoffee createCoffee();
}
Run Code Online (Sandbox Code Playgroud)