Pregunta

Tengo la siguiente enumeración:

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 );

    }
}

¿Es posible crear una interfaz StringEnum para asegurarse de que cada enumeración tenga find(), toString() y un constructor?

Gracias.

¿Fue útil?

Solución

No es posible especificar constructores ni métodos estáticos en una interfaz.Para obtener una explicación buena y concisa, consulte este artículo: No hay métodos estáticos en las interfaces.

Otros consejos

Las enumeraciones ya tienen un valor de() (su método de búsqueda) método.Y "toString()" es un método java.lang.Object, por lo que cada clase tendrá eso; en otras palabras, ¡no puedes forzarlo!No veo el valor de imponer un constructor ya que diferentes enumeraciones podrían tener diferentes inicializaciones.

Atentamente

  1. Los métodos estáticos no se pueden definir en las interfaces.
  2. Los constructores no se pueden definir en las interfaces.
  3. toString se define en java.lang.Object, requerirlo en una interfaz nunca resultará en un error de compilación si el método no está definido.

¿Por qué quieres imponer el constructor de todos modos?No se pueden crear nuevas instancias de enums en tiempo de ejecución de todos modos (a menos que sea a través de algún mecanismo de reflexión).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top