Come costruire un'interfaccia per tale enum
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.
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
- i metodi statici non possono essere definiti nelle interfacce
- i costruttori non possono essere definiti nelle interfacce
-
toString
è definito injava.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).