¿Por qué las implementaciones enum no pueden acceder a campos privados en la clase enum?
Acabo de responder esta pregunta diciendo cómo resolver el problema de compilación:
¿Cómo usar los campos en Java Enum anulando el método?
Pero lo que no entiendo es por qué el error está ocurriendo en primer lugar.
Aquí está el ejemplo escrito como una enumeración:
public enum MyEnum {
FIRST {
@Override
public String doIt() {
return "1: " + someField; //error
}
},
SECOND {
@Override
public String doIt() {
return "2: " + super.someField; //no error
}
};
private String someField;
public abstract String doIt();
}
Aquí es exactamente lo mismo que las clases abstractas
abstract class MyClass {
class FIRST extends MyClass {
@Override
public String doIt() {
return "1: " + someField; //no error
}
};
class SECOND extends MyClass {
@Override
public String doIt() {
return "2: " + super.someField; //no error
}
};
private String someField;
public abstract String doIt();
}
En el caso deFIRST
dentro deenum
implementación a la que no puede accedersomeField
. Sin embargo, en el caso de la clase abstracta sí puede.
Añadiendo adicionalmentesuper
soluciona el problema, al igual que eliminar elprivate
modificador en el campo.
¿Alguien sabe por qué está ocurriendo esta ligera peculiaridad en el comportamiento?