В Java, как я получаю значение перечисления в самом перечислении?

Я хочу переопределить toString() для моего перечисления, Color. Однако я не могу выяснить, как получить значение экземпляра Color в Color перечисление. Существует ли способ сделать это в Java?

Пример:

public enum Color {
    RED,
    GREEN,
    BLUE,
    ...

    public String toString() {
        // return "R" for RED, "G", for GREEN, etc.
    }
}
6
задан Matthew 23 February 2010 в 21:11
поделиться

6 ответов

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. Я не проверял синтаксис, но идея такова.

18
ответ дан 8 December 2019 в 02:19
поделиться

Вы также можете включить тип этого , например:

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(); 
    } 
  } 
} 
15
ответ дан 8 December 2019 в 02:19
поделиться

Enum.name () - кто это подумал?

Однако в большинстве случаев имеет смысл хранить любую дополнительную информацию в переменной экземпляра, которая установлена ​​в конструкторе.

4
ответ дан 8 December 2019 в 02:19
поделиться

Java делает это за вас по умолчанию, она возвращает .name() в .toString(), вам нужно переопределить toString(), только если вы хотите получить что-то РАЗНОЕ от имени. Интересными методами являются .name() и .ordinal() и .valueOf().

Чтобы сделать то, что вы хотите, вы должны сделать

.toString(this.name().substring(1));

Что вы, возможно, захотите сделать вместо этого, так это добавить атрибут под названием abbreviation и добавить его в конструктор, добавить getAbbreviation() и использовать его вместо .toString()

0
ответ дан 8 December 2019 в 02:19
поделиться

Я нашел что-то вроде этого (не проверено):

public enum Color {
RED{
public String toString() {
    return "this is red";
}
},
GREEN{
public String toString() {
    return "this is green";
}
},
...   

}

Надеюсь, это немного поможет!

0
ответ дан 8 December 2019 в 02:19
поделиться

Используйте super и String.substring():

public enum Color
{
    RED,
    GREEN,
    BLUE;

    public String toString()
    {
        return "The color is " + super.toString().substring(0, 1);
    }
}
3
ответ дан 8 December 2019 в 02:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: