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 +
"}";