1

我第一次尝试使用枚举。对于某些测试,我想覆盖我的枚举的 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 案例构建字符串。

到目前为止一切顺利,但似乎不可能返回通过开关盒构建的字符串,或者我在返回时犯了错误?返回所选枚举的任何其他选项?我可以添加一个属性来保存我选择的枚举名称,但是我可以这样做更简单一些。

感谢帮助

4

2 回答 2

1

根据JEP 325 ,可以返回switch从 Java 12 开始的语句的值。检查您的 Java 版本,如果它小于 12,那么您不能这样使用,您必须首先将预期值保存在局部变量中。我的意思是,如果您的 java 版本早于 12,那么您必须这样做:switch

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 +
            "}";
于 2019-09-07T12:13:16.497 回答
0

我认为你真的不需要 switch 语句,因为枚举的超类已经知道你的“类型”的名称:

@Override
public String toString()
{
    return "Fahrzeuge: " + super.toString() +
            ", ps:" + this.ps +
            ", reifen:" + this.reifen +
            ", gewicht:" + this.gewicht;
}

只需调用超类的 toString() 方法,即可获得当前选择的枚举类型的字符串值。你甚至可以删除你的类型字符串。

于 2019-09-07T12:47:10.220 回答