Я хочу переопределить toString()
для моего перечисления, Color
. Однако я не могу выяснить, как получить значение экземпляра Color
в Color
перечисление. Существует ли способ сделать это в Java?
Пример:
public enum Color {
RED,
GREEN,
BLUE,
...
public String toString() {
// return "R" for RED, "G", for GREEN, etc.
}
}
public enum Color {
RED("R"),
GREEN("G"),
BLUE("B");
private final String str;
private Color(String s){
str = s;
}
@Override
public String toString() {
return str;
}
}
Вы можете использовать конструкторы для Enums. Я не проверял синтаксис, но идея такова.
Вы также можете включить тип этого
, например:
public enum Foo {
A, B, C, D
;
@Override
public String toString() {
switch (this) {
case A: return "AYE";
case B: return "BEE";
case C: return "SEE";
case D: return "DEE";
default: throw new IllegalStateException();
}
}
}
Enum.name ()
- кто это подумал?
Однако в большинстве случаев имеет смысл хранить любую дополнительную информацию в переменной экземпляра, которая установлена в конструкторе.
Java делает это за вас по умолчанию, она возвращает .name() в .toString(), вам нужно переопределить toString(), только если вы хотите получить что-то РАЗНОЕ от имени. Интересными методами являются .name() и .ordinal() и .valueOf().
Чтобы сделать то, что вы хотите, вы должны сделать
.toString(this.name().substring(1));
Что вы, возможно, захотите сделать вместо этого, так это добавить атрибут под названием abbreviation и добавить его в конструктор, добавить getAbbreviation() и использовать его вместо .toString()
Я нашел что-то вроде этого (не проверено):
public enum Color {
RED{
public String toString() {
return "this is red";
}
},
GREEN{
public String toString() {
return "this is green";
}
},
...
}
Надеюсь, это немного поможет!
Используйте super
и String.substring()
:
public enum Color
{
RED,
GREEN,
BLUE;
public String toString()
{
return "The color is " + super.toString().substring(0, 1);
}
}