Há como adicionar atributos a uma classe em tempo de execução?  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
bonfarj
Java Ninja
[Avatar]

Membro desde: 28/03/2006 09:55:47
Mensagens: 298
Offline

Acredito que com a Reflection API não seja possível, não sei se existe alguma forma de montar classes dinamicamente. Se isso não for possível vou ter que pensar em outra solução para o meu problema.

Abraços,

IGOR BRITO ALVES
@igoralves
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

Você não pode adicionar atributos a uma classe em tempo de execução, mas você pode fazer com que sua classe tenha um atributo do tipo Map<String,Object> para que você possa associar nomes a novos atributos.

Exemplo:

...



[WWW]
brunogamacatao
JavaBaby

Membro desde: 28/03/2006 14:41:44
Mensagens: 92
Offline

Cara, uma saída é usar alguma API de construção de bytecodes em tempo de execução (existem algumas) ou então criar um arquivo .java, compilar em tempo de execução e, finalmente, carregar o código compilado através de um class loader dinâmico. Qualquer ferramenta de geração de código e os ambientes desenvolvimento integrado utilizam esta técnica. Se você quiser realmente cair de cabeça nesse mundo, uma sugestão minha é que dê uma olhada na API Jet, para a construção de templates de geração. Permite que você produza código dinâmico através de templates com o estilo JSP.
peczenyj
Moderador
[Avatar]

Membro desde: 26/03/2006 23:25:37
Mensagens: 3191
Localização: Rio de Janeiro
Offline

Vc não pode usar Scripting Language Support do Java 6?

http://java.sun.com/developer/technicalArticles/J2SE/Desktop/scripting/

Ou alguma linguagem interpretada que rode sob a jvm como Groovy?

http://pacman.blog.br

'Não importa quanto alguém se dedique à tarefa. Ninguém consegue fazer a água da cascata cair para cima.'
[WWW]
nbluis
GUJ Master
[Avatar]

Membro desde: 27/05/2006 01:31:51
Mensagens: 1531
Localização: Porto Alegre - RS
Offline

Eu acho que prefiro scripting....
Não sei o que pode ser da PermGen com essa geração/compilação/carga de classes dinâmicas.

Luis Eduardo Bohrer

Any fool can write code that a computer can understand. Good programmers write code that humans can understand.
[WWW]
bonfarj
Java Ninja
[Avatar]

Membro desde: 28/03/2006 09:55:47
Mensagens: 298
Offline

thingol wrote:Você não pode adicionar atributos a uma classe em tempo de execução, mas você pode fazer com que sua classe tenha um atributo do tipo Map<String,Object> para que você possa associar nomes a novos atributos.

Gostei sua sugestão. Eu pensei em algo parecido, mas a sua idéia com Map ficou muito melhor que a minha. Reconheço as limitações(getters e setters), mas talvez seja um preço justo.

brunogamacatao wrote:Cara, uma saída é usar alguma API de construção de bytecodes em tempo de execução (existem algumas) ou então criar um arquivo .java, compilar em tempo de execução e, finalmente, carregar o código compilado através de um class loader dinâmico. Qualquer ferramenta de geração de código e os ambientes desenvolvimento integrado utilizam esta técnica. Se você quiser realmente cair de cabeça nesse mundo, uma sugestão minha é que dê uma olhada na API Jet, para a construção de templates de geração. Permite que você produza código dinâmico através de templates com o estilo JSP.

Essa linha de racioncínio é muito boa! Porém, pela forma como eu quero usar com o Struts 2, talvez não seja a melhor opção, Nunca tinha pensando em API's para manipulação de bytecodes, muito legal isso!

E aos amigos que falaram sobre scripting, essa opção nem tinha passado pela minha cabeça. Eu vou ler mais sobre o assunto, nunca mexi com nada de scripting em Java, talvez seja uma boa para essas mudanças dinâmicas.

Valeu pessoal, adorei as dicas, muito obrigado mesmo! E se alguém tiver mais alguma coisa, pode falar, conhecimento nunca é demais!

Abraços a todos!

This message was edited 2 times. Last update was at 15/10/2007 10:04:27


IGOR BRITO ALVES
@igoralves
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team