En Java SE 7 (y muy probablemente en versiones anteriores) la clase de enumeración se declara así:¿De dónde viene el método Enum.valueOf (String)?
public abstract class Enum<E extends Enum<E>>
extends Object
implements Comparable<E>, Serializable
La clase Enum tiene un método estático con esta firma:
T static<T extends Enum<T>> valueOf(Class<T> enumType, String name)
Pero hay no hay método estático: valueOf(String)
definido en la clase Enum ni hacia arriba en la jerarquía en la que Enum pertenece.
La pregunta es ¿de dónde viene valueOf(String)
? ¿Es una característica del lenguaje, es decir, una característica incorporada en el compilador?
La razón para no incluir este método en el conjunto de métodos de la clase Enum es que no se pudo proporcionar una implementación hasta el momento de compilación cuando se conoce el valor Enum devuelto (que es: un objeto enum del tipo definido por el programador). Aún así, una alternativa sería declararlo realmente como un método abstracto en la clase Enum y dejar que el compilador proporcione una implementación en tiempo de compilación. Por supuesto, esto significa que también podría ser anulado por el usuario, pero el compilador también podría manejar este caso. ¡Parece más natural tener el método en la clase! – Razvan
@Razvan Los métodos estáticos no pueden ser abstractos en Java (o en la mayoría de los otros lenguajes, supongo). – sepp2k
¡No dije resumen estático! – Razvan