El método getClass(), el objeto Class y una introducción a Reflection - 1

"¡Hola, amigo!"

"Ahora es el momento del evento principal. Nos familiarizaremos con la clase Class y tocaremos Reflection.
Como probablemente ya se dio cuenta, todo en Java es un objeto. ¿Y qué necesita un objeto? ¿Qué tiene cada objeto que define ¿de qué se trata?"

"¡Una clase!"

"¡Correcto! Bien hecho. Cada objeto tiene una clase. Pero volviendo a los objetos... Algunos objetos contienen completamente una entidad, mientras que otros simplemente ayudan a administrarla".

"Este último tipo incluye FileOutputStream y Thread . Cuando crea un objeto Thread , no se crea un nuevo hilo. La máquina virtual Java crea el hilo después de llamar al método start(). Este objeto simplemente ayuda a administrar el proceso".

"Lo mismo con FileOutputStream : el archivo se almacena en el disco y el sistema operativo administra el almacenamiento y el acceso. Pero podemos interactuar con él a través de objetos de archivo, una vez más con la ayuda de la máquina virtual Java".

"Sí, ya entiendo eso".

"Entonces, hay una clase especial llamada Clase para interactuar con las clases".

"Eso no fue difícil de adivinar".

"Sí. Cada vez que la máquina virtual Java carga una nueva clase en la memoria, crea un objeto Class, que puede usar para obtener información específica sobre la clase cargada".

"Cada clase y objeto está asociado con un « Objeto de clase »".

Ejemplo Descripción
Class clazz = Integer.class;
Obtiene el objeto Class de la clase Integer.
Class clazz = int.class;
Obtiene el objeto Class de la clase int.
Class clazz = "123".getClass();
Obtiene el objeto Class de un objeto String.
Class clazz = new Object().getClass();
Obtiene el objeto Class del objeto Object.

"¡Guau! ¡Qué interesante!"

"¿Recuerdas que la palabra clase es una palabra clave en Java y no se puede usar como nombre de variable?"

"Oh, sí, lo sé, lo sé. Simplemente lo olvidé".

"¿Ya has usado el objeto Clase en alguna parte?"

"Sí, lo usamos cuando escribimos nuestra propia implementación del método equals".

"Sí, puede usar el método getClass() para probar si los objetos tienen la misma clase".

"¿Y qué puedes hacer con este objeto?"

"Bueno, muchas cosas:"

codigo Java Descripción
Class s = int.class;
String name = s.getName();
Obtiene el nombre de la clase.
Class s = Class.forName("java.lang.String");
Obtiene una clase por nombre.
Object o1 = String.valueOf(1);
Object o2 = 123 + "T";
o1.getClass() == o2.getClass();
Compara clases de objetos.

"Interesante, pero no tan genial como pensaba".

"¿Quieres que sea genial? También está ReflectionReflection es genial".

"¿Qué es la reflexión ?"

La reflexión es la capacidad de una clase para obtener información sobre sí misma. Java tiene clases especiales:  Field y Method , que son similares a la clase Class para las clases. Así como los objetos Class le permiten obtener información sobre una clase, los objetos Field brindan información sobre un campo. , y el objeto Method proporciona información sobre un método. Y mira lo que puedes hacer con ellos:"

codigo Java Descripción
Class[] interfaces = List.class.getInterfaces();
Obtiene una lista de objetos Class para las interfaces de la clase List
Class parent = String.class.getSuperclass();
Obtiene el objeto Class de la clase principal de la clase String.
Method[] methods = List.class.getMethods();
Obtiene una lista de los métodos de la clase List
String s = String.class.newInstance();
Crea una nueva cadena
String s = String.class.newInstance();
Method m = String.class.getMethod("length");
int length = (int) m.invoke(s)
Obtiene el método de longitud de la clase String y lo llama en String s

"¡Guau! ¡Eso sí que es genial!"