Как создать интерфейс для такого перечисления
Вопрос
У меня есть следующее перечисление:
public enum Status implements StringEnum{
ONLINE("on"),OFFLINE("off");
private String status = null;
private Status(String status) {
this.status = status;
}
public String toString() {
return this.status;
}
public static Status find(String value) {
for(Status status : Status.values()) {
if(status.toString().equals(value)) {
return status;
}
}
throw new IllegalArgumentException("Unknown value: " + value );
}
}
Можно ли создать интерфейс StringEnum, чтобы убедиться, что в каждом перечислении есть find(), toString() и конструктор?
Спасибо.
Решение
В интерфейсе невозможно указать ни конструкторы, ни статические методы.Для получения хорошего и краткого объяснения ознакомьтесь с этой статьей: Отсутствие статических методов в интерфейсах
Другие советы
В перечислениях уже есть valueOf() (ваш метод поиска) метод.И "toString()" - это объектный метод java.lang., поэтому он будет у каждого класса, другими словами, вы не можете заставить его!Я не вижу смысла применять конструктор, поскольку разные перечисления могут иметь разные инициализации.
С наилучшими пожеланиями
- статические методы не могут быть определены в интерфейсах
- конструкторы не могут быть определены в интерфейсах
toString
определяется вjava.lang.Object
, требование этого в интерфейсе никогда не приведет к ошибке компиляции, если метод не определен.
Почему вы все равно хотите принудительно использовать конструктор?Вы не можете создавать новые экземпляры enum
в любом случае, во время выполнения (если, возможно, не с помощью какого-либо механизма отражения).