Domanda

Ho il seguente 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 );

    }
}

È possibile costruire un'interfaccia StringEnum per assicurarsi che ogni enum abbia find (), toString () e un costruttore?

Grazie.

È stato utile?

Soluzione

Non è possibile specificare costruttori o metodi statici in un'interfaccia. Per una spiegazione concisa e corretta, consulta questo articolo: Nessun metodo statico nelle interfacce

Altri suggerimenti

Gli Enum hanno già un valueOf () (il tuo metodo find). E "quotString ()" è un metodo java.lang.Object, quindi ogni classe avrà che, in altre parole, non puoi forzarlo! Non riesco a vedere il valore di imporre un costruttore in quanto enumerazioni diverse potrebbero avere inizializzazioni diverse.

Cordiali saluti

  1. i metodi statici non possono essere definiti nelle interfacce
  2. i costruttori non possono essere definiti nelle interfacce
  3. toString è definito in java.lang.Object , la sua richiesta in un'interfaccia non comporterà mai un errore di compilazione se il metodo non è definito.

Perché vuoi imporre il costruttore comunque? Non è comunque possibile creare nuove istanze di enum in fase di esecuzione (a meno che non si tratti di un meccanismo di riflessione).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top