Как построить интерфейс для такого перечисления - PullRequest
4 голосов
/ 22 сентября 2008

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

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 () и конструктор?

Спасибо.

Ответы [ 3 ]

6 голосов
/ 22 сентября 2008

Невозможно указать ни конструкторы, ни статические методы в интерфейсе. Для хорошего, краткого объяснения, проверьте эту статью: Нет статических методов в интерфейсах

4 голосов
/ 22 сентября 2008

У перечислений уже есть метод valueOf () (ваш метод поиска). И "toString ()" - это метод java.lang.Object, поэтому у каждого класса будет то, что, другими словами, вы не можете форсировать! Я не вижу значения применения конструктора, поскольку разные перечисления могут иметь разные инициализации.

С уважением

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...