Há como adicionar atributos a uma classe em tempo de execução?

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. :stuck_out_tongue:

Abraços,

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:

classe Pessoa {
    public String nome;
    public Map&lt;String,Object&gt; qualidades;
}

Pessoa p = new Pessoa();
p.setNome("José Arimatéia");
p.qualidades.put("bondoso", Boolean.TRUE); // não tenho como escrever "p.setBondoso(Boolean.TRUE)" mas isso é um bom substituto.
p.qualidades.put("saldoConta", 12.34);

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.

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?

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.

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.

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! :wink: