Можно ли таким способом передавать аргументы в конструктор 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; } };
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: ...?
Да, можно передавать аргументы в конструктор enum. В вашем примере с Enum Type, true и false в конструкторе указывают на то, является ли тип данных примитивным или нет. Это просто параметр, который используется при создании экземпляров enum.
В Java в конструкции switch case вы не можете использовать тип данных или объект, например Books.KTULHU напрямую в case. Вы уже указали переменную b как экземпляр enum Books, поэтому в case используется просто значение DARK_TOWER или KTULHU без привязки к конкретному объекту enum. Это является особенностью синтаксиса конструкции switch case в Java.
Да, можно передавать аргументы в конструктор enum. В вашем примере с Enum Type, true и false в конструкторе указывают на то, является ли тип данных примитивным или нет. Это просто параметр, который используется при создании экземпляров enum.
В Java в конструкции switch case вы не можете использовать тип данных или объект, например Books.KTULHU напрямую в case. Вы уже указали переменную b как экземпляр enum Books, поэтому в case используется просто значение DARK_TOWER или KTULHU без привязки к конкретному объекту enum. Это является особенностью синтаксиса конструкции switch case в Java.