【发布时间】:2020-01-10 00:08:06
【问题描述】:
我第一次尝试使用枚举。 对于某些测试,我想覆盖我的枚举的 toString 方法并返回一个带有所选枚举的字符串。
到目前为止,这是我的代码:
@Override
public String toString()
{
return "Fahrzeuge{" +
switch(this)
{
case MOTORAD: "1"; break;
case LKW: "2"; break;
case PKW: "3"; break;
case FAHRRAD: "4"; break;
}
+
"typ:" + this.typ +
", ps:" + this.ps +
", reifen:" + this.reifen +
", gewicht:" + this.gewicht +
"}";
}
IntelliJ 在我的案例下划线并告诉我以下内容:“不是声明” => 我想这是有道理的,如果不允许使用 switch 构建 String - case。
到目前为止一切顺利,但似乎不可能返回通过 switch case 构建的字符串,还是我在返回时犯了错误? 返回所选枚举的任何其他选项? 我可以添加一个属性来保存我选择的枚举名称,但我可以这样做更简单一些。
感谢您的帮助
【问题讨论】:
-
"到目前为止一切顺利,但似乎不可能返回通过 switch case 构建的字符串" - 你是如何得出这个结论的?你有编译器异常吗?运行时异常?如果是这样,请包括编译器错误/堆栈跟踪。 --- 两句话: - 你看过
Enum#ordinal()吗? - 你应该习惯用英文编写代码,至少只要你的域有可接受的翻译(type,tires,hp,weight,...) -
IntelliJ 在我的案例下划线并告诉我以下内容:“不是声明”猜猜这是有道理的,如果不可能返回 switch 案例生成的字符串。
-
... 请通过editing 您的问题包括编译器错误。还有一点:代码原样似乎不可扩展,因此违反了Open-Closed Principle。我建议将
Enum转换为一个类。与一些 Builders 一起,您可以实现相同的行为,但更具可扩展性(例如,您的列表缺少电动滑板车和坦克 ????) -
还有两个: - 在您的
toString()实现中,您以"Fahrzeuge"("vehicles",复数)开头String,但String实际上只代表一个@987654337 @ ("vehicle")。 - 属性reifen(tires):这太笼统了。这是轮胎的类型吗?品牌?数量?更具体,例如在你的情况下"anzahlReifen"("numOfTires")。 -
为什么您的枚举中除了数字之外的所有内容都有字段?只需添加它,你会没事的。此外,它是带有两个“r”的“Motorrad”。
标签: java switch-statement return expression switch-expression