Variables tipo macro en java
Hola, necesito introducir dentro de una variable una sentencia para ejecutar luego. Ejemplo var='campo.getText()' donde el campo varia de acuerdo al valor que va tomando dentro un bucle.
- Inicie sesión o regístrese para enviar comentarios
Que yo sepa no se puede
que yo sepa en java no se puede realizar algo similar, sin embargo puedes hacerlo utilizando reflection.
sobres
Closures
Ese es el concepto de closure, una función que reside dentro de una variable. En Java aún no están disponibles (tengo entendido que la versión 7 sí tendrá closures).
Hazlo como dice Nopalin con Reflection o también puedes ayudarte con Groovy:
Re: Variables tipo macro en java
Supongo que vienes de programar en C. Te sugiero que dejes de "pensar en C" y mejor "piensa en Java". No preguntes cuál es el equivalente en Java para un idioma propio de C, donde por cierto no aclaras si basta con que el problema se resuelva en tiempo de compilación o en tiempo de ejecución. Mejor plantea tu problema y así se te podrá proporcionar una solución orientada a objetos.
Saludos
Javier Castañón
PD Esto incluye el uso de templates, en caso de que vengas de C++ ¿ok?
Re: Closures
Me corrijo ya que no estaba actualizado. La propuesta para integrar Closures al JDK7 finalmente no fue aprobada.
Utilidad
La verdad es que en todos los años que llevo programando en Java, pocas veces me he encontrado con la necesidad de utilizar algo como closures. Pero sí he estado una o dos veces frente al código pensando si tan sólo pudiera pasar aquí un método como parámetro, esto sería más fácil... y al final esos casos sí tienen solución, pero es un poco más enredosa:
Esto de hecho es un patrón de diseño llamado Command, aunque los rucos le decimos simplemente callback. Tal vez por esto es que al final no los aprobaron, en conjunto con que alguien dijo "si alguien quiere closures a fuerzas, ya estará usando Scala o Groovy de todas formas"...
Re: Utilidad
Concurro con ezamudio. En Java *nunca*, pero *nunca* vas a extrañar los closures, a menos que hayas programado en otro lenguaje. bueno, me confieso culpable de haber escrito código Java más o menos ilegible usando clases anónimas, pero ¡qué padre código! (si no, pregúntenle a Spring JDBC-template)
OK, levanten la mano los que han hecho esto en JavaScript y lo extrañan en Java:
var fn = function() {};
Además, los patrones no son sólo soluciones recurrentes, sirven también para subsanar carencias en los lenguajes de programación. Hay patrones que no se necesitan en otros lenguajes porque los problemas que resuelven no existen en otros lenguajes.
Saludos
Javier Castañón
OGNL
Otra opción para hacer cosas similares a lo que pides es este proyecto.
macro de sustitucion
Lo que necesito es recoger con un bucle los valores de los JText introducidos por el usuario e ir concatenando en una variable que contendra los valores de todos los campos del JText. El valor de cada JText 1. JText2....., etc.
Ejemplo:
campo=JText1;
var= var + campo.setText();
Como hacer que me ejecute la sentencia: campo.setText();
y de acuerdo a la posicion del bucle me vaya tomando el valor del siguiente JText ??
Gracias...
arreglos
con reflection nuevamente. Supongamos que tienes una clase con un monton de propiedades del tipo JTextField:
Espero te sirva, saludos