En Java, es seguro asumir que getClass()
llamado dentro de un constructor de una clase utilizada como clase base proporcionará información sobre la clase derivada, en lugar de clase de la clase base?Qué clase obtiene getClass() informe dentro de un constructor de una clase base
Parece que funciona, pero supongo que eso no significa necesariamente que sea seguro. Por ejemplo, si tengo las dos clases siguientes:
public class Parent {
public Parent() {
System.out.println(getClass().getName());
}
}
Y:
public class Derived extends Parent {
public Derived() {
super();
}
public static void main(String... args) {
new Derived();
}
}
Cuando ejecuto el método main()
en la clase derivada se imprime: Derived
(que es lo que estaba esperando) . Pero, ¿puedo confiar en ese comportamiento en las JVM?
Lo usaría para fines de registro ... –
de API de Javadoc, ** Devuelve la clase de tiempo de ejecución de un objeto. Ese objeto Clase es el objeto que está bloqueado por métodos sincronizados estáticos de la clase representada. ** – user1406062
En cuanto a si es "seguro" o no, diría que depende mucho de lo que planeas hacer con él. ¿De verdad solo estás registrando el nombre? Eso no parece terriblemente útil a la larga, pero sí, será "seguro" e imprimirá el nombre de clase real que se está instanciando en el tiempo de ejecución. – jrajav