In Java SE 7 (e molto probabilmente nelle versioni precedenti) la classe Enum viene dichiarata in questo modo:Da dove proviene il metodo Enum.valueOf (String)?
public abstract class Enum<E extends Enum<E>>
extends Object
implements Comparable<E>, Serializable
La classe Enum ha un metodo statico con questa firma:
T static<T extends Enum<T>> valueOf(Class<T> enumType, String name)
Ma c'è nessun metodo statico: valueOf(String)
definito nella classe Enum né superiore nella gerarchia a cui Enum appartiene.
La domanda è da dove viene valueOf(String)
? È una funzionalità del linguaggio, ovvero una funzionalità integrata nel compilatore?
Il motivo per non includere questo metodo nell'insieme dei metodi della classe Enum è che non è possibile fornire un'implementazione fino al momento della compilazione quando il valore Enum restituito è noto (ovvero: un oggetto enum del tipo definito dal programmatore). Ancora, un'alternativa sarebbe dichiararla effettivamente come un metodo astratto nella classe Enum e lasciare che il compilatore fornisca un'implementazione in fase di compilazione. Ovviamente, questo significa che potrebbe essere sovrascritto dall'utente, ma il compilatore potrebbe gestire anche questo caso. Sembra più naturale avere il metodo in classe! – Razvan
@Razvan I metodi statici non possono essere astratti in Java (o nella maggior parte degli altri linguaggi, suppongo). – sepp2k
Non ho detto astratto statico! – Razvan