Можно ли таким способом передавать аргументы в конструктор enum? Сегодня на занятии по Java SE столкнулся с небольшой проблемой. Наткнулся на непонятный для меня синтаксис, читая интересную информацию про Enum`ы на сайте.
Начнем с того, что я уже знаю: Я знаю то, что такое Enum Я знаю так же то, что все переменные в Enum`е по дефолту объявлены как static final переменные Я знаю о том, что с помощью метода values() очень удобно их итерировать Еще мне известно то, что у Enum есть возможность переопределять методы с помощью анонимных классов.
Например:public enum Books {
DARK_TOWER {
@Override
public void info() {
System.out.println("Dark Tower, autor - Stephen King");
}
},
KTULHU {
@Override
public void info() {
System.out.println("Ktulhu, autor - Govard Lovecraft");
}
};
public abstract void info();
}
(Если я в чем-то ошибся из вышеперечисленного, то сообщите мне об этом, пожалуйста)
Но есть пару вещей, которые мне никак не понять.
Во-первых, это вот такой вот синтаксис:enum Type {
INT(true) {
public Object parse(String string) { return Integer.valueOf(string); }
},
INTEGER(false) {
public Object parse(String string) { return Integer.valueOf(string); }
},
STRING(false) {
public Object parse(String string) { return string; }
};

boolean primitive;
Type(boolean primitive) { this.primitive = primitive; }

public boolean isPrimitive() { return primitive; }
public abstract Object parse(String string);
}
Что вообще означают значения true и false в конструкторе(?) Enum`а?
Во-вторых, допустим, где-то в main`е у меня есть вот такой вот код:Books b = Books.DARK_TOWER;
switch (b) {
case DARK_TOWER:
Books.DARK_TOWER.info();
break;
case KTULHU:
Books.KTULHU.info();
break;
}
Никак не могу понять, почему в case`е я не могу писать вот так: case Books.KTULHU: ...?

21 Авг 2019 в 07:03
262 +1
0
Ответы
1

Да, можно передавать аргументы в конструктор enum. В вашем примере с Enum Type, true и false в конструкторе указывают на то, является ли тип данных примитивным или нет. Это просто параметр, который используется при создании экземпляров enum.

В Java в конструкции switch case вы не можете использовать тип данных или объект, например Books.KTULHU напрямую в case. Вы уже указали переменную b как экземпляр enum Books, поэтому в case используется просто значение DARK_TOWER или KTULHU без привязки к конкретному объекту enum. Это является особенностью синтаксиса конструкции switch case в Java.

20 Апр 2024 в 13:09
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир