Cómo construir una interfaz para dicha enumeración
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.
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
- Los métodos estáticos no se pueden definir en las interfaces.
- Los constructores no se pueden definir en las interfaces.
toString
se define enjava.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 enum
s en tiempo de ejecución de todos modos (a menos que sea a través de algún mecanismo de reflexión).