Considere este caso:es Java garantizado para inline constantes de cadena si se pueden determinar en tiempo de compilación
public Class1 {
public static final String ONE = "ABC";
public static final String TWO = "DEF";
}
public Class2 {
public void someMethod() {
System.out.println(Class1.ONE + Class1.TWO);
}
}
Normalmente se esperaría que el compilador en línea En la una y las dos constantes. Sin embargo, ¿este comportamiento está garantizado? ¿Puede implementar en tiempo de ejecución Class2 sin Class1 en el classpath, y esperar que funcione independientemente de los compiladores, o es una optimización de compilador opcional?
EDITAR: ¿Por qué hacer esto? Bueno, tengo una constante que se compartiría entre dos extremos de una aplicación (cliente y servidor sobre RMI) y sería muy conveniente en este caso particular poner la constante en una clase que solo puede estar en un lado de esa división (ya que lógicamente es el que posee ese valor constante) en lugar de tenerlo en una clase de constantes arbitrarias solo porque necesita ser compartida por ambos lados del código. En tiempo de compilación es todo un conjunto de archivos de origen, pero en tiempo de compilación se divide por paquete.
Gracias Jon, pero eso no es exactamente lo que quise decir. "internado" significa que solo hay una instancia, pero aún podría obtener un NoClassDefError si la clase falta en el tiempo de ejecución si el compilador no lo incluyó realmente. – Yishai
Tal vez estoy ciego, pero ¿dónde dice eso? – gshauger
@gshaugher: ¿Qué parte? –