El azucar de sintaxis proporcionado por la instalación enum
de Java a veces puede ser un poco confuso. Considere este ejemplo, que no se compila:Contexto estático en la definición de enumeración
public enum TestEnum {
FOO("foo") {
public void foo() {
helper(); // <- compiler error
}
};
String name;
TestEnum(String name) {
this.name = name;
}
public abstract void foo();
private void helper(){
// do stuff (using this.name, so must not be static)
}
}
¿Alguien puede explicar por qué el compilador dice
método 'helper()' no estáticos no pueden ser referenciadas desde un contexto estático
¿Cómo está exactamente este contexto estático?
Usted puede hacer esta compilación cambiando la llamada a this.
helper()
(en este caso es un punto confuso:? Si es que realmente estamos en un "contexto estático", como el compilador indica, ¿cómo se puede "this
" trabajar) o por aumentando la visibilidad de helper()
al nivel predeterminado. ¿Cual preferirías? Además, siéntase libre de sugerir un título de pregunta mejor :-)
Editar: He encontrado some discussion about this - pero no hay respuestas reales. Mi colega piensa que el hecho de que this.helper()
funcione es en realidad un error del compilador. Y de hecho, con las versiones Java más recientes parece que no funciona (aunque super.helper()
sí): "no se puede encontrar el símbolo helper()". (Aunque hay algo raro sucediendo: después de probar con diferentes versiones de Java no puedo obtener this.helper()
para compilar de nuevo con ninguno de ellos ...)
Tengo el libro; ¿Qué rompecabezas quieres decir? (No pude encontrarlo rápidamente.) – Jonik
Ambas copias del libro están guardadas en cajas en alguna parte, así que no tengo ni idea. –