我创建了这个枚举:
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;
}
}
我尝试了以下方式来使用它
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 ...
}
.
.
.
}
它只给我一个错误,说“无法从CoffeeSorts转换为String”。 你能告诉我我做错了吗?
答案 0 :(得分:5)
您的type
变量是String
,但您正在尝试指定{em>值,这些值是CoffeeSort
。您需要先将String
转换为CoffeeSort
,或更改签名。
例如:
public ACoffee createCoffee(CoffeeSort type) {
...
}
或
public ACoffee createCoffee(String typeName) {
CoffeeSort type = CoffeeSort.valueOf(typeName);
...
}
另请注意,在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();
}
答案 1 :(得分:4)
type
中的switch(type)
应该是CoffeeSorts
类型的对象。你传了一个字符串。
答案 2 :(得分:2)
您的方法签名应为:
public ACoffee createCoffee(CoffeeSorts type)
您的switch语句适用于type
,只有当type
属于CoffeeSorts
类型时,您放在那里的案例陈述才有意义。
旁注:枚举通常用Java大写(参见Coding Conventions - Naming Enums)。