Tuve una discusión con un compañero de trabajo hoy, si el uso del operador de Java instanceof
es una especie de reflexión. Y la discusión evolucionó rápidamente hacia lo que realmente define la reflexión.
Entonces, ¿cuál es la definición de reflexión?
¿Y se instanceof
considera el uso de "usar la reflexión"?
Y además, si instanceof
se considera reflexión, ¿el polimorfismo no está también "usando la reflexión"? Sí no, ¿Cuál es la diferencia?
java
language-agnostic
language-features
reflection
Bjarke Freund-Hansen
fuente
fuente
instanceof
es un ejemplo de reflexión. Ciertamente, está en algún lugar entre el uso normal de datos y el uso de metadatos a través degetClass()
& friends, pero puede tener definiciones viables de cualquier manera.return
considera el uso de "programación estructural"?Respuestas:
Esta es la definición de reflexión según wikipedia:
No podría haberlo dicho mejor y resaltado la parte importante de su pregunta. Dicho esto, sí,
instanceof
se considera usar la reflexión. El programa observa su estructura y realiza introspección de tipo .fuente
if (true)
analiza un valor , no un tipo . Por eso no se considera reflexión.En aras de la claridad, consideraría dos respuestas.
Teóricamente ,
instanceof
es una forma de reflexión, como se explica en la respuesta de Falcon .Sin embargo, prácticamente , cuando un programador habla sobre el uso de la reflexión, generalmente se refiere a mucho más que simplemente verificar si una variable es de cierto tipo. Este es un concepto tan rudimentario, sin el cual, el polimorfismo no sería posible .
Tenga en cuenta que el uso a
instanceof
menudo indica un olor a código, y en su lugar a menudo se puede usar el polimorfismo adecuado.fuente
Puede ser interesante en el siguiente artículo: http://java.sun.com/developer/technicalArticles/ALT/Reflection/
La clave en este artículo es un fragmento de código donde simulan la palabra clave "instanceof" utilizando el método "isInstance" de la clase "Class", que es parte de la función de reflexión de Java.
fuente
Desde las otras respuestas, la definición en Wikipedia ha cambiado (estoy de acuerdo con este cambio, pero no fui yo quien lo hizo) para eliminar la parte entre paréntesis:
https://en.wikipedia.org/wiki/Type_introspection también dice específicamente
Yo no consideraría
instanceof
a caer bajo la primera definición: el programa examina un valor, no por su propia estructura, y que no implica ningún valores que representan la estructura del programa (en Java:java.lang.Class
,java.reflect.Method
, etc.); El sello distintivo de la reflexión es trabajar con tales valores.fuente
SÍ, el operador "instanceof" es una forma de reflexión. Las respuestas anteriores te dicen por qué.
"Reflexión" o "introspección de objeto / clase" es una exageración en estos días, pero varios lenguajes de programación han usado parte de ese concepto, desde hace algún tiempo.
DOT NET (clon de Java), (mis) usa mucho.
fuente