2012-09-28 81 views
16

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?

+1

Lo usaría para fines de registro ... –

+0

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

+0

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

Respuesta

13

getClass es uno de los métodos and returns the runtime class of thisObject 's:

devuelve la clase en tiempo de ejecución de este objeto. El objeto Clase devuelto es el objeto que está bloqueado por métodos estáticos sincronizados de la clase representada.

Así que sí, siempre devolverá Derived.

Cuestiones relacionadas