Frage

Ich habe folgendes 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 );

    }
}

Ist es möglich, StringEnum Schnittstelle um sicherzustellen, dass jeder ENUM hat finden () toString () und ein Konstruktor?

zu bauen

Danke.

War es hilfreich?

Lösung

Es ist nicht möglich, entweder Konstrukteure oder statische Methoden in einer Schnittstelle zu spezifizieren. Für eine gute, kurze Erklärung, Sie in diesem Artikel: keine statischen Methoden in Schnittstellen

Andere Tipps

Aufzählungen haben bereits eine valueOf () (Ihr find-Methode) Methode. Und „toString ()“ ist eine java.lang.Object Methode, so wird jede Klasse, die, mit anderen Worten, man kann es nicht erzwingen! Ich kann nicht den Wert der Durchsetzung Konstruktor sehen, da verschiedene Aufzählungen verschiedene Initialisierungen haben könnten.

Mit freundlichen Grüßen

  1. statische Methoden können nicht in Schnittstellen
  2. definiert werden
  3. Konstrukteure können nicht in Schnittstellen definiert werden
  4. toString in java.lang.Object definiert, es in einer Schnittstelle erfordern, werden nie in einem Compiler-Fehler führen, wenn die Methode nicht definiert ist.

Warum wollen Sie den Konstruktor trotzdem erzwingen möchten? Sie können keine neue Instanzen von enums zur Laufzeit erstellen sowieso (es sei denn vielleicht über einigen Reflexionsmechanismus).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top