Durante la codificación, he encontrado un extraño comportamiento del compilador Java.Error del compilador de Java: "las clases internas no pueden tener declaraciones estáticas", excepto para los tipos simples
Al compilar la clase (fuente a continuación), el compilador emite un error ("inner classes cannot have static declarations
") en la variable de clase NULL. ¡Esto es lo esperado!
Sin embargo, no se genera ningún error en la variable de clase ZERO. ¡Esto no lo entiendo!
Por qué esta diferencia, que parece permitir declaraciones estáticas de tipos simples, pero no de objetos, en clases internas.
(-version javac: 1.6.0_24)
public class Outer {
public static final Runnable HELLO = new Runnable() {
// No compiler error
public static final int ZERO = 0;
// Causes compiler error: "inner classes cannot have static declarations"
public static final Object NULL = null;
@Override
public void run() {
System.out.println("Hello " + ZERO + NULL);
}
};
}
Creo que es porque la variable priomitiva se tratará como una constante y compilada * en línea *, mientras que la referencia 'Objeto' no lo hará. Recuerdo haber visto algo sobre cómo el compilador trata las constantes con referencia 'null' en este video de YouTube: http://www.youtube.com/watch?v=V1vQf4qyMXg&t=68m1s – Magicode
Si se trata de una referencia nula o un" nuevo objeto() "referencia no hace diferencia, ambos causan un error de compilación. – Morten