Как создать интерфейс для такого перечисления

StackOverflow https://stackoverflow.com/questions/112517

  •  02-07-2019
  •  | 
  •  

Вопрос

У меня есть следующее перечисление:

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., поэтому он будет у каждого класса, другими словами, вы не можете заставить его!Я не вижу смысла применять конструктор, поскольку разные перечисления могут иметь разные инициализации.

С наилучшими пожеланиями

  1. статические методы не могут быть определены в интерфейсах
  2. конструкторы не могут быть определены в интерфейсах
  3. toString определяется в java.lang.Object, требование этого в интерфейсе никогда не приведет к ошибке компиляции, если метод не определен.

Почему вы все равно хотите принудительно использовать конструктор?Вы не можете создавать новые экземпляры enumв любом случае, во время выполнения (если, возможно, не с помощью какого-либо механизма отражения).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top