猿问

java - 返回带有 switch 大小写的字符串

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


到目前为止一切顺利,但似乎不可能返回通过 switch case 构建的字符串,或者我在返回时犯了错误?还有其他选项可以返回所选枚举吗?我可以添加一个属性来保存我选择的枚举名称,但我虽然可以做得更简单一些。


凤凰求蛊
浏览 150回答 2
2回答

largeQ

switch根据JEP 325 ,可以返回以 Java 12 开头的语句的值。检查你的 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 +            "}";

慕尼黑5688855

我认为你真的不需要 switch 语句,因为枚举的超类已经知道你的“类型”的名称:@Overridepublic String toString(){    return "Fahrzeuge: " + super.toString() +            ", ps:" + this.ps +            ", reifen:" + this.reifen +            ", gewicht:" + this.gewicht;}只需调用超类的 toString() 方法,您就可以获得当前选择的枚举类型的字符串值。您甚至可以删除您的类型字符串。
随时随地看视频慕课网APP

相关分类

Java
我要回答