Помогите понять поведение Enum в Java

165
09 марта 2019, 23:20

Есть такой код:

public class Solution {
public static enum E1 {A, B, C, Y}
public static void main(String[] args) {
    Solution.switchTest(E1.C);
    /* output
    it's E1.C
             */
}
public static void switchTest(Enum obj) {
    switch (obj.getClass().getSimpleName()) {
        case "E1":
            System.out.println("it's " + obj.getClass().getSimpleName() + "." + obj);
            break;
        default:
            System.out.println("undefined");
    }
}

Результатом его выполнения будет, как вы могли догадаться, "it's E1.C".

Так вот, когда мы доходим в дебагере до "switch (obj.getClass().getSimpleName())", то в результате получаем "C".

Так каким боком мы проходим case, и мало того, получаем в консоль "E1.C" ?!

Update 1:

Answer 1

Как вам написали уже в комментарии, это выводится результат toString для obj. В отладочном режиме есть крутая фича - Evaluate Expression, указал на картинке куда тыкать. Выделяете нужное вам выражение, затем нажимаете туда, оно у вас появляется в открывшемся окошке, нажимаете Evaluate - получаете результат его вычисления в текущем месте программы, в котором вы остановились. Так же там можно писать свои выражения, используя все видимые в текущем месте компоненты программы.

Answer 2

То что вы описали, очень странно. Так как енум в java это обычный класс, а A,B,C,Y - это объекты данного класса. Соответственно, класса с именем С у вас нет и быть не может.

READ ALSO
Сравнить java-код по функциональности

Сравнить java-код по функциональности

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

235
Динамическое изменение курсора в EditText

Динамическое изменение курсора в EditText

Динамическое изменение курсора в EditText

191
Что за ошибка StringIndexOutOfBoundsException

Что за ошибка StringIndexOutOfBoundsException

Вылетает ошибка javalang

134
Чтение переменных без плагинов в pom.xml

Чтение переменных без плагинов в pom.xml

Существует pomxml где есть блок 1F

135