Сегодня на занятии по 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: ...
?