Методе name() в Enum и нужен ли он вообще?

public enum Colors {
    BLACK, WHITE, RED, BLUE, GREEN
}

public class Test {
    public static void main(String[] args) {
        Colors color1 = Colors.RED;
        System.out.println(color1);
        System.out.println(color1.name());
    }
}

Зачем вообще тогда нам нужен name(), если и без него выдает тоже самый результат в консоли.


Ответы (1 шт):

Автор решения: Дмитрий Никифоров

Внутри println у объектов неявно вызывается toString().

По умолчанию toString() и name() у enum возвращают одну и ту же строку, поэтому у вас результат одинаковый.

Но toString() вы можете переопределить как хотите, а name() нет, так как он final в абстрактном классе java.lang.Enum, от которого наследуются enum-ы.

public enum Colors {
    BLACK, WHITE, RED, BLUE, GREEN;

    // Нельзя:
    //@Override
    //public String name() {
    //  return "my string";
    //}

    // Можно:
    @Override
    public String toString() {
        return "my string";
    }
}
→ Ссылка