2011-03-21 23 views
10

Supongamos que tengo un "empleado" de clase que tiene un objeto obj. ¿cómo se realizará la instrucción obj.getClass(). GetName()? ¿Y qué debería ser el regreso?¿Qué hace Class.getName() para una clase determinada?

+0

El objeto que devuelve es un objeto? O cualquier subclase de Object? – justkt

+1

Tienes que ser un poco más específico. Agregue algunos detalles para que pueda entender lo que está buscando ... – Thomas

+0

No me queda claro a qué se refiere con "cómo se ejecutará [una declaración]". ¿Estás preguntando cómo la JVM realiza despacho dinámico en tiempo de ejecución? ¿Cómo el compilador genera bytecode? ¿O simplemente cómo escribir código que hará que se llame (aunque este último parece trivialmente directo)? –

Respuesta

19

El método getClass() obtiene la clase real del objeto, que puede ser diferente de la clase de la variable que contiene el objeto. El método getName() devolverá el paquete más clase nombre completo de esa clase como una cadena, así:

com.company.project.package.MyClass

Por ejemplo, el siguiente código genera la cadena anterior:

 
package com.company.project.package; 

class MyClass extends Object { 
    // some definition 
} 

Object o = new MyClass(); 
System.out.println(o.getClass().getName()); 
-1

El nombre de la clase, en su caso "empleado" o "my.package.employee".

0

Descargo de responsabilidad: Si bien la respuesta de Erick es correcta, no está completa.

En resumen

Este método es similar a getCanonicalName() con una diferencia - se devuelve el nombre binario de la clase, donde versión canónica devuelve null (por ejemplo para las clases anónimas).

detalles

Si este objeto clase representa un tipo de referencia que no es de tipo entonces el nombre binario de la clase se devuelve un array:

String.class.getName() 
    returns "java.lang.String" 
(new Object() {}).getClass().getName() 
    returns "test.Main$1" 

Si este objeto clase representa un tipo primitivo o nulo, el nombre devuelto es una cadena igual a la palabra clave del lenguaje Java correspondiente al tipo primitivo o nulo.

byte.class.getName() 
    returns "byte" 
long.class.getName() 
    returns "long" 

Si esta clase de objeto representa una clase de matrices, a continuación, la forma interna del nombre consiste en el nombre del tipo de elemento precedido de uno o más '[' caracteres que representan la profundidad de la anidación array:

(new Object[3]).getClass().getName() 
    returns "[Ljava.lang.Object;" 
(new int[3][4][5][6][7][8][9]).getClass().getName() 
    returns "[[[[[[[I" 

La codificación de los nombres de tipo de elemento es el siguiente:

Element Type   Encoding 
boolean    Z 
byte     B 
char     C 
class or interface  L<classname>; 
double     D 
float     F 
int     I 
long     J 
short     S 

docs oficiales sobre este método: https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html#getName--

Cuestiones relacionadas