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.

Foi útil?

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

  1. métodos estáticos não pode ser definida nas interfaces
  2. construtores não pode ser definida nas interfaces
  3. toString é definida em java.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 enums em tempo de execução de qualquer maneira (a não ser talvez através de algum mecanismo de reflexão).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top