java - вернуть строку с регистром переключателя

Я пробовал использовать перечисление в первый раз. Для некоторых тестов я хочу переопределить метод toString моего перечисления и вернуть String с выбранным перечислением.

Вот мой код:

@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" => Я думаю, это имеет смысл, если не разрешено строить String с помощью switch - case.

Пока все хорошо, но кажется, что невозможно вернуть строку, созданную с помощью корпуса переключателя, или я сделал ошибку при возвращении? Есть ли другие варианты возврата выбранного перечисления? Я мог бы добавить атрибут, содержащий выбранное мной имя перечисления, но я мог бы сделать это немного проще.

Спасибо за помощь

2 ответа

Решение

Я думаю, вам действительно не нужен оператор switch, потому что суперкласс перечисления уже знает имя вашего "типа":

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

Просто вызовите метод toString() суперкласса, и вы получите строковое значение вашего текущего выбранного типа перечисления. Вы даже можете удалить строку своего типа.

Можно вернуть значение switchоператор, начиная с Java 12, согласно JEP 325. Проверьте свою версию 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 +
            "}";
Другие вопросы по тегам