2008-09-21 6 views
4

У меня есть следующие перечисления:Как построить интерфейс для такого перечисления

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, чтобы убедиться, что каждый имеет перечисление найти(), ToString() и конструктор?

Спасибо.

ответ

6

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

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

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

4

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

С уважением

 Смежные вопросы

  • Нет связанных вопросов^_^