AOM + Reflection

7 respostas
M

Galera, seguinte.

Desejo fazer o seguinte:
criar uma classe chamada “Classe”
Criar uma classe chamada “Atributo”
Criar uma classe chamada “Metodo”

Bom, a classe tem seus atributos e seus métodos.
Mas o que preciso é criar estas classes em tempo de execução.

Por exemplo: Criei “Produto” e criei seus atributos e seus métodos. Como fazer para instanciar um objeto desta classe?

Pretendo usar reflection para acessar seus atributos, mas como fazer seus métodos serem executados?
Alguem me sugeriu “invoke”, mas… como usar? Como fazer. A minha dúvida é como começar, o resto me viro. Se conseguir instanciar um objeto de uma classe criada em runtime, o resto vai ser moleza.

Me ajudem ae…
Quem já trabalhou com Adapter Object Model, isto deve ser moleza. Se tiverem um exemplo pra eu ver, ja basta.

Agradeço.

Att,

Lucas Israel

7 Respostas

kemperacc

Isso eh tranqs, te passo a noite

rod

Veja um exemplo de como usar o invoke:

Method method = String.class.getMethod("substring", int.class, int.class);
String result = (String)method.invoke("Rodrigo", 2,5);
System.out.println(result);
M

Entendi… Caramba, isto vai ser bem interessante. Valew mesmo. Vou dar uma estudada na documentação…
Sem querer abusar, mas voce tem alguma sugestao de como criar uma classe e instanciar um objeto desta classe usando invoke?

Att,

Lucas Israel

Ataxexe

Bom, para criar classes em tempo de execução, você pode usar o Javassist.

Para instanciar um objeto de uma classe, use newInstance caso queira usar o construtor padrão (sem argumentos). Para usar um construtor específico, obtenha-o primeiro com getDeclaredConstructor.

Marky.Vasconcelos

Voce não pode criar um .class do modo que voce quer fazer em tempo de execução.

Voce tem duas opções, trabalhar com o seu AOM sem usar Reflection.
Ou então usar uma bytecode lib para criar o .class dinamicamente e poder usar reflection. Mas esse caminho já é bem mais dificil.
Voce pode usar algo como CGLib, ASM ou Javaassist.

Alexandre_Saudate

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=3295

[]´s

M

asaudate:
http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=3295

[]´s

Cara, valew mesmo… Exatamente isto que eu estou querendo.

Agradeço a ajuda de todos. Agora é comigo.
Vou estudar mais a fundo tudo que foi sugerido.

Att,

Lucas Israel

Criado 5 de julho de 2010
Ultima resposta 5 de jul. de 2010
Respostas 7
Participantes 6