java - return 带开关大小写的字符串
java - return String with switch case
我第一次尝试使用枚举。
对于某些测试,我想覆盖我的枚举的 toString 方法和 return 一个带有所选枚举的字符串。
到目前为止,这是我的代码:
@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 在我的案例下划线并告诉我以下内容:"Not a Statement"
=> 我想这是有道理的,如果不允许使用 switch-case 构建字符串。
到目前为止还不错,但是 return 一个通过 switch case 构建的字符串似乎是不可能的,还是我在 return 中犯了一个错误?
return 所选枚举的任何其他选项?
我可以添加一个属性来保存我选择的枚举名称,但我可以做得更简单一些。
感谢帮助
根据 JEP 325,可以 return 以 Java 12 开头的 switch
语句的值。检查你的 Java 版本,如果它小于 12,那么你不能像那样使用 switch
,你必须先求助于将预期值保存在局部变量中。我的观点是,如果您的 java 版本早于 12,那么您必须这样做:
String num = "";
switch (this)
{
case MOTORAD:
num = "1";
break;
case LKW:
num = "2";
break;
case PKW:
num = "3";
break;
case FAHRRAD:
num = "4";
break;
}
return "Fahrzeuge{" + num +
"typ:" + this.typ +
", ps:" + this.ps +
", reifen:" + this.reifen +
", gewicht:" + this.gewicht +
"}";
但是如果您安装了 Java 12(或更高版本),那么您可以这样做(注意不同的语法!):
return "Fahrzeuge{" +
switch (this)
{
case MOTORAD -> "1";
case LKW -> "2";
case PKW -> "3";
case FAHRRAD -> "4";
}
+ "typ:" + this.typ +
", ps:" + this.ps +
", reifen:" + this.reifen +
", gewicht:" + this.gewicht +
"}";
和做注意如果数字对应于声明枚举值的顺序,你可以简单地使用ordinal()
:
return "Fahrzeuge{" + this.ordinal() +
"typ:" + this.typ +
", ps:" + this.ps +
", reifen:" + this.reifen +
", gewicht:" + this.gewicht +
"}";
我认为你真的不需要 switch 语句因为枚举的 superclass 已经知道你的名字 "type":
@Override
public String toString()
{
return "Fahrzeuge: " + super.toString() +
", ps:" + this.ps +
", reifen:" + this.reifen +
", gewicht:" + this.gewicht;
}
只需调用 super class 的 toString() 方法,即可获得当前所选枚举类型的字符串值。您甚至可以删除您的类型字符串。
我第一次尝试使用枚举。 对于某些测试,我想覆盖我的枚举的 toString 方法和 return 一个带有所选枚举的字符串。
到目前为止,这是我的代码:
@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 在我的案例下划线并告诉我以下内容:"Not a Statement" => 我想这是有道理的,如果不允许使用 switch-case 构建字符串。
到目前为止还不错,但是 return 一个通过 switch case 构建的字符串似乎是不可能的,还是我在 return 中犯了一个错误? return 所选枚举的任何其他选项? 我可以添加一个属性来保存我选择的枚举名称,但我可以做得更简单一些。
感谢帮助
根据 JEP 325,可以 return 以 Java 12 开头的 switch
语句的值。检查你的 Java 版本,如果它小于 12,那么你不能像那样使用 switch
,你必须先求助于将预期值保存在局部变量中。我的观点是,如果您的 java 版本早于 12,那么您必须这样做:
String num = "";
switch (this)
{
case MOTORAD:
num = "1";
break;
case LKW:
num = "2";
break;
case PKW:
num = "3";
break;
case FAHRRAD:
num = "4";
break;
}
return "Fahrzeuge{" + num +
"typ:" + this.typ +
", ps:" + this.ps +
", reifen:" + this.reifen +
", gewicht:" + this.gewicht +
"}";
但是如果您安装了 Java 12(或更高版本),那么您可以这样做(注意不同的语法!):
return "Fahrzeuge{" +
switch (this)
{
case MOTORAD -> "1";
case LKW -> "2";
case PKW -> "3";
case FAHRRAD -> "4";
}
+ "typ:" + this.typ +
", ps:" + this.ps +
", reifen:" + this.reifen +
", gewicht:" + this.gewicht +
"}";
和做注意如果数字对应于声明枚举值的顺序,你可以简单地使用ordinal()
:
return "Fahrzeuge{" + this.ordinal() +
"typ:" + this.typ +
", ps:" + this.ps +
", reifen:" + this.reifen +
", gewicht:" + this.gewicht +
"}";
我认为你真的不需要 switch 语句因为枚举的 superclass 已经知道你的名字 "type":
@Override
public String toString()
{
return "Fahrzeuge: " + super.toString() +
", ps:" + this.ps +
", reifen:" + this.reifen +
", gewicht:" + this.gewicht;
}
只需调用 super class 的 toString() 方法,即可获得当前所选枚举类型的字符串值。您甚至可以删除您的类型字符串。