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,
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,
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<String,Object> 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!