Porque o método não foi definido para todas as constantes, só para ESEL. Para que funcione é preciso que exista o método para todas as constantes, definido dessa forma:
[code]class A {
enum Pferde {
PONY(10), ESEL(15) {
public int get() {
return 15;
}
},
MULI(20);
Pferde(int i) { }
public int get() {
return 10;
}
};
public static void main(String[] args) {
System.out.println(Pferde.ESEL.get());
}
}[/code]
Você não está utilizando um “constant specific class body” corretamente. Utiliza-se o mesmo quando precisamos sobreescrever um método do Enum, no exemplo mostrado não há um método existente. Dê uma olhada nesse código agora:
public class TesteEnum {
enum Pferde {
PONY(10), ESEL(15) {
public int get() {
return 1005;
}
},
MULI(2);
private int i;
Pferde(int i) {
}
public int get() {
return i;
}
};
Pferde pf;
public static void main(String[] args) {
TesteEnum te = new TesteEnum();
te.pf = Pferde.ESEL;
System.out.println(te.pf.get());
}
}
Pelo visto, você só pode definir um método para uma constante de uma enum, e conseguir acessá-lo, se ele for um “override” de um método que é dessa enum. (Para quem achou esquisitos os nomes - Pferde é o plural de Pferd (um equino qualquer, ou então um cavalo), Pony é um pônei, Esel um jumento, e Muli uma mula.
A JLS diz (em seu estilo semelhante ao estilo jurídico):