Методы enum в Java
В теле enum можно объявлять методы, общие
для всех констант. Они вызываются у конкретной константы
через точку:
enum PostStatus {
DRAFT,
PUBLISHED,
ARCHIVED;
public boolean isEditable() {
return this == DRAFT;
}
}
Вызовем метод константы DRAFT и выведем, можно ли ее менять:
System.out.println(PostStatus.DRAFT.isEditable());
Если поведение у констант разное, у отдельной константы можно задать собственное тело в фигурных скобках и переопределить абстрактный метод enum - по той же схеме, что абстрактный метод у наследника абстрактного класса:
enum PostAction {
SAVE {
@Override
public String verb() {
return "save";
}
},
PUBLISH {
@Override
public String verb() {
return "publish";
}
},
ARCHIVE {
@Override
public String verb() {
return "archive";
}
};
public abstract String verb();
}
Вызовем метод verb у константы PUBLISH и выведем строку:
System.out.println(PostAction.PUBLISH.verb());
Общий метод может опираться на поля, заданные через конструктор перечисления:
System.out.println(PostStatus.PUBLISHED.isLive());
Объявите enum Role с константами
GUEST, USER, ADMIN.
Добавьте метод label():
для GUEST верните "guest",
для USER - "user",
для ADMIN - "admin".
Выведите результат для Role.USER.
Объявите enum Role с константами
GUEST и ADMIN и абстрактным методом
accessLevel().
Для GUEST верните 0,
для ADMIN - 10.
Выведите Role.ADMIN.accessLevel().