UTNianos

Versión completa: Reflection
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Tiene algun sentido usar Reflection (en java, en este caso), cuando conozco el metodo que deba utilizar???

Osea, por ejemplo:
(objeto es del tipo Class si mal no recuerdo)

objeto = (tipoObjeto) clase.newInstance();
Class tiposParam[] = {BigDecimal.class};
Method metCargaDatos;
metCargaDatos = clase.getMethod("Metodoloco", tiposParam);
[...]
resultado = (BigDecimal) metCargaDatos.invoke(objeto, );




Osea, puede haber un caso en el que sea util usarlo sabiendo que mensaje debo mandarle??? (no puedo solucionarlo con una interfaz y ya?)

Gracias????
Si te entendi bien, un caso podria ser el DataBinding entre un objeto X y un control de la UI, por ejemplo.

En Java no se bien como sera, pero por ejemplo en WinForms (C#.NET) para hacer un construir un DataBinding entre un objecto (empresa) y un TextBox (razonSocialTextBox), por ejemplo, haces:



razonSocialTextBox.DataBindings.Add("Text", empresa, "RazonSocial");




Lo que hace por adentro, es invocar al getter RazonSocial de empresa, mediante Reflection, y le pasa como parametro el Text de razonSocialTextBox, tambien por Refllection.
No tiene demasiado sentido invocar el motor de Reflection si conocés el tipo...

Un caso donde sí tiene sentido usarlo es como dicen arriba para hacer binding de datos, si querés hacer algo genérico que pueda vincular una propiedad (o un getter/setter en Java) a partir de un string... y sí, para eso vale usar Reflection. Internamente por ejemplo Hibernate y otros ORM utilizan reflection para leer y escribir en propiedades de las entidades aprovechando los datos contenidos en los Xml o Annotations de configuración.

Pero si conocés que la clase tiene un método setPropiedad... no veo ningún sentido en usar Reflection. Ahora si no conocieras la interfaz y recibieras un object que NO pudieras castear a un tipo porque NO SABES de qué tipo es... ahí vale. De cualquier manera hay casos en los cuales hay una solución más de diseño que el uso de Reflection. La pregunta a hacerte es "¿por qué recibo un objeto del cual no conozco sus métodos?". Si no es para aplicar una solución genérica a un problema (como el databinding), es poco probable que necesites usar Reflection (al menos para esto de leer métodos... hay lugares donde yo lo uso porque el problema está asociado directamente a la metadata de una clase y en esos casos es razonable utilizar Reflection).
Al final habia entendido mal. El string lo recibe de una db, al igual que otras cosas, asique tenia todo el sentido del mundo :P.


Muchas gracias por las respuestas!!!
Ahí tiene sentido =)

Yo por ej. armé un scheduler para poder ejecutar asincrónico un método y también, guardo la clase, el nombre del método y el mensaje que recibe en la base de datos. Y luego mi servicio de scheduling va leyendo eso y ejecutándolos. Obviamente eso usa reflection =)
URLs de referencia