Creación dinámica de variables, atributos y métodos

coposdeavena
03 de Junio del 2005
Hola majetes :) :

Quería plantearos una duda muy grande que tengo acerca del poder "dinámico" de Java. En Action Script (y creo que en Java Script también, por aquello de que cumplen ambos con la ECMA), no sólo se pueden crear variables en tiempo de ejecución, sino que también es posible añadir atributos y métodos a instancias de clases.

Así, en Action Script, se puede emplear la función "set (nombre, valor)" para crear una variable en tiempo de ejecución, algo que equivaldría a "nombre = valor" en tiempo de compilación. Y si se quiere poder añadir atributos y métodos a una instancia de una clase, basta con añadir un prefijo concreto en la declaración de dicha clase (ahora no recuerdo cuál)

Mi duda es si en Java existe algo similar a ambos casos o por el momento no se ha implementado algo semejante (lo cual me extraña mucho, teniendo en cuenta que la norma ECMA bebe de las fuentes de Java). He intentado buscar información en Internet sobre este asunto, pero no he encontrado nada que exactamente esté referido a éso.

Como mucho, he localizado como instanciar una clase u otra de forma dinámica, mediante "Class.forName(nombre_clase).newInstance()" lo cual es una buena noticia, pero no solventa mi problema :/ .

¿Alguien puede resolver mi duda? Muchas gracias :D .

nkpevfqy
03 de Junio del 2005
Para poder crear y manipular objetos de forma dinámica en compilación, utiliza la reflexión. con el newInstance() puedes crear un objeto dinámicamente. Para poder invocar métodos reflexivamente, utiliza objeto.getClass().getMethod() Una vez tengas los metodos, seleccionas el que quieras por nombre y lo ejecutas sobre el objeto con invoke(). Asi puedes crear objetos y manipularlos sin conocer su tipo en compilacion. Aunque no entiendo muy bien para que puedes necesitar eso. Si necesitas crear un objeto, has de saberlo en compilacion y definir una referencia para instanciarlo cuando lo necesites.

copos
03 de Junio del 2005
Vaya, muchas gracias. Disculpa que haya tardado tanto en responder, pero entre la falta de tiempo y que había perdido la pista al mensaje... Disculpas ^_^ .

La verdad es que este asunto de crear variables y clases dinámicamente las veo interesantes para algunos casos muy concretos. Te explico... Trabajo en un proyecto en el que se crean varias clases por cada tabla de una BD. Todas las clases de todas las tablas, estructuralmente son iguales, salvo que se componen de diferentes atributos y de métodos con diferente nombre. Y entonces, para facilitar el trabajo, había pensado si en tiempo de ejecución se pueden definir clases para así evitar tener que realizar a mano decenas y decenas de objetos. En resumen, hubiera consistido en una clase a la cual le pasases información de la tabla (nombre, nombres de campos y tipos de los campos) y ella se encargase de crear en tiempo de ejecución una clase temporal que se encargue de realizar la interacción con la tabla de la BD através e Torque.

Un saludo :) .

Pedro
03 de Junio del 2005
Puedes utilizar librerias que trabajan a nivel de bytecode como bcel (http://jakarta.apache.org/bcel/) o asm (http://asm.objectweb.org/)

coposdeavena
03 de Junio del 2005
Hola Pedro. La verdad es que pensaba que habría algo más "plano" de usar, sin tener que recurrir a la manipulación de los bytecodes. Sin embargo, los dos proyectos que me comentas tienen pinta de ser muy pero que muy interesantes. Procuraré echarles un vistazo en cuanto pueda. Muchas gracias :) .

rockdo
03 de Junio del 2005
No se si ya hayas checado la 'java Reflection",
quiza podria servirte

coposdeavena
03 de Junio del 2005
Hola compañero. ¿En qué consiste o para qué fin está destinada esa clase?

rockdo
03 de Junio del 2005
echale un vistazo al siguiente articulo:

http://www-06.ibm.com/developerworks/java/library/j-dyn0603/


rockdo
03 de Junio del 2005
perdon, copie mal el link.......el bueno es este: (espero)

http://www-106.ibm.com/developerworks/java/library/j-dyn0603/