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() 方法,即可获得当前所选枚举类型的字符串值。您甚至可以删除您的类型字符串。