我创建了这个枚举:
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".你能告诉我我做错了什么吗?
你的type变量是String的,但你要指定值它们CoffeeSort的值.您需要将其转换String为CoffeeSort第一个,或更改签名.
例如:
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)