¿Cómo es útil la reflexión?

La reflexión es agradable porque puedes escribir código que pueda ocuparse de cualquier clase. Por ejemplo, supongamos que desea leer / escribir sus clases en el disco y tiene, digamos, 100 clases de datos.

¿Desea escribir el nombre de cada variable de instancia y colección para 100 clases de datos? ¡Solo si te pagan por hora!

En su lugar, puede escribir un “serializador” que da una clase, itera a través de las variables de instancia utilizando la reflexión y las escribe en el disco.

Lo mismo para leer del disco.

Hay un millón y otro usos para la reflexión también. Supongamos que tiene una GUI definida en algún tipo de archivo de datos y desea asignar un botón a una llamada al método. Puede almacenar el nombre del método en el archivo de datos, luego usar la reflexión para llamar al método en la clase. Entonces, la reflexión le permite usar datos para conectar bits de código. De nuevo, para cualquier clase.

Casi siempre que necesite conectar datos al código, la reflexión es útil.

Ah, y pruebas … La mayoría de los marcos de pruebas unitarias utilizan la reflexión para encontrar métodos de prueba …

Puede usar la reflexión para interrogar a algunas clases sobre cómo se ven, luego usar eso para construir código. Lo he usado para construir andamios web, por ejemplo.

La lista continua.

No solo es útil, Reflection in Java es absolutamente esencial si está haciendo algún tipo de instanciación dinámica e invocación de clases o métodos que no conoce en tiempo de compilación. Dado que las funciones de Java no son funciones de primera clase ( http://en.wikipedia.org/wiki/Fir …), usar la API Reflection es realmente la única forma limpia de hacer estas cosas. Por ejemplo, mire la respuesta de Joshua Engel a esta pregunta:
¿Cuál es una buena forma de refactorizar métodos Java con código común y una llamada a método en el medio?

En su mayor parte, no usará la reflexión usted mismo, pero muchos marcos populares se crean sobre la reflexión. Es bueno saber dónde se usa la reflexión y los costos asociados con ella.

Algunos ejemplos son
a) Hibernate y probablemente la mayoría de los marcos ORM usan la reflexión para mapear las entidades para mapear los campos a la base de datos.
b) El Proxy Java está construido sobre mecanismos de reflexión integrados en Java.
c) CGILib usa una combinación de ASM y reflexión para extender su clase
d) Spring AOP se implementa utilizando Java Proxy y CGI Lib. Entonces, usa la reflexión
e) Spring Core en sí usa la reflexión para descubrir lo que un bean quiere “ser”. Por ejemplo, Spring usa la reflexión para verificar si un bean quiere ser un bean de fábrica. Si el bean implementa una interfaz FactoryBean, se supone que es un bean de fábrica
f) BeanUtils se basa completamente en la reflexión

Probablemente hay miles más que extrañé. La idea general es que cualquier marco en el que alguien pueda conectar sus clases, la reflexión es un mecanismo común para que el marco descubra cosas sobre las clases conectadas.

La mayoría de los buenos frameworks generalmente se mantendrán alejados de hacer cosas estúpidas como introspección de la clase en cada llamada, y limitarán la introspección al tiempo de carga. Es fácil confundirse con la reflexión, y si está comenzando Java, es bueno saber qué es la reflexión, pero evite incluir toda nuestra reflexión en su módulo.