Como construir interface para tais enum
Pergunta
Eu tenho a seguinte enumeração:
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 );
}
}
É possível construir interface de StringEnum para garantir que cada enum tem find (), toString () e um construtor?
Graças.
Solução
Não é possível especificar qualquer construtores ou métodos estáticos em uma interface. Para uma boa explicação concisa, confira este artigo: Sem métodos estáticos em interfaces de
Outras dicas
Enums já tem um valueOf () (seu método find) método. E "toString ()" é um método java.lang.Object, assim, cada classe terá que, em outras palavras, você não pode forçá-lo! Eu não posso ver o valor de impor um construtor desde diferentes enums pode ter diferentes inicializações.
Atenciosamente
- métodos estáticos não pode ser definida nas interfaces
- construtores não pode ser definida nas interfaces
-
toString
é definida emjava.lang.Object
, exigindo-lo em uma interface nunca vai resultar em um erro de compilação, se o método não está definido.
Por que você quer para impor o construtor de qualquer maneira? Você não pode criar novas instâncias de enum
s em tempo de execução de qualquer maneira (a não ser talvez através de algum mecanismo de reflexão).