2008-09-21 13 views
4

je l'ENUM suivante:Comment construire une interface pour une telle ENUM

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); 

    } 
} 

Est-il possible de construire une interface StringEnum pour vous assurer que tous les ENUM trouver(), toString() et un constructeur?

Merci.

Répondre

6

Il n'est pas possible de spécifier des constructeurs ou des méthodes statiques dans une interface. Pour une bonne explication concise, consultez cet article: No static methods in interfaces

3
  1. méthodes statiques ne peuvent pas être définies dans les interfaces
  2. constructeurs ne peuvent pas être définies dans les interfaces
  3. toString est défini dans java.lang.Object, ce qui nécessite dans une interface n'entraîne jamais une erreur de compilation si la méthode n'est pas définie.

Pourquoi voulez-vous imposer le constructeur de toute façon? Vous ne pouvez pas créer de nouvelles instances de enum s à l'exécution de toute façon (sauf peut-être via un mécanisme de réflexion).

4

Les énumérations ont déjà une méthode valueOf() (méthode find). Et "toString()" est une méthode java.lang.Object, donc, chaque classe aura cela, en d'autres termes, vous ne pouvez pas le forcer! Je ne peux pas voir la valeur de l'application d'un constructeur puisque des enums différents peuvent avoir des initialisations différentes.

Cordialement