Можно ли таким способом передавать аргументы в конструктор 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
213 +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 Апр в 13:09
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 83 829 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир