Question

J'ai l'énumération suivante:

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 s'assurer que chaque enum possède find (), toString () et un constructeur?

Merci.

Était-ce utile?

La solution

Il n'est pas possible de spécifier des constructeurs ni des méthodes statiques dans une interface. Pour une bonne explication concise, consultez cet article: Aucune méthode statique dans les interfaces

Autres conseils

Les enums ont déjà un valueOf () (méthode de votre méthode de recherche). Et "toString ()" est une méthode java.lang.Object, donc chaque classe aura cela, autrement dit, vous ne pouvez pas le forcer! Je ne vois pas l'intérêt d'appliquer un constructeur car différentes énumérations pourraient avoir différentes initialisations.

Cordialement

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

Pourquoi voulez-vous appliquer le constructeur de toute façon? De toute façon, vous ne pouvez pas créer de nouvelles instances de enum au moment de l’exécution (sauf peut-être par un mécanisme de réflexion).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top