Inserir método numa classe

Olá a todos. (voltando depois um longo inverno ao fórum. :slight_smile: )

[EDIT]
Apenas alterando a dúvida, existe algum jeito fácil de eu editar uma classe Java e inserir um método novo, um import, etc, nela, via código?
Ou teria que fazer uma lógica mesmo para ir inserindo esses trechos manualmente?
Obrigado.
[/EDIT]

Gostaria de alguma opinião sobre como fazer o que preciso.
Vou desenhar uma tela usando o JavaFX e precisaria criar um conversor que vai ler o arquivo .fxml e vai gerar um arquivo proprietario nosso aqui.

Minha dúvida é que os componentes do JavaFX tem seus atributos (layoutX, layoutY, text, height, width, etc).
Vou precisar fazer um tipo de mecanismo para, quando ele ler um layoutX, ele saiba que precisa gerar um atributo chamado left. E assim por diante, para cada atributo de cada componente.

Alguma sugestão para facilitar essa parte? Ler o FXML está tranquilo, usei o JDOM para isso e consegui pegar todas as tags e seus atributos/valores. Gerar o arquivo também não deve ser problema.
Grande lance é fazer esse interpretador, ou tradutor, de JavaFX para nosso tipo de arquivo.

Obrigado pela ajuda.

alterando a dúvida… :slight_smile:

[quote=rbarioni]Olá a todos. (voltando depois um longo inverno ao fórum. :slight_smile: )

[EDIT]
Apenas alterando a dúvida, existe algum jeito fácil de eu editar uma classe Java e inserir um método novo, um import, etc, nela, via código?
Ou teria que fazer uma lógica mesmo para ir inserindo esses trechos manualmente?
Obrigado.
[/EDIT]

[/quote]

Vc pode estender
https://www.google.com.br/?gws_rd=ssl#q=herança+e+polimofismo+em+java

[quote=Luiz Augusto Prado][quote=rbarioni]Olá a todos. (voltando depois um longo inverno ao fórum. :slight_smile: )

[EDIT]
Apenas alterando a dúvida, existe algum jeito fácil de eu editar uma classe Java e inserir um método novo, um import, etc, nela, via código?
Ou teria que fazer uma lógica mesmo para ir inserindo esses trechos manualmente?
Obrigado.
[/EDIT]

[/quote]

Vc pode estender

Eu iria um pouco além com Reflection! Mas não sei se eh o caso…

[]'s

acho que nao me expliquei direito…hehe

Eu preciso editar fisicamente o arquivo Java e adicionar um metodo novo nele.
Tipo, abrir o arquivo mesmo e inserir um metodo ali.

Queria ver se existe algum pacote para manipular as classes mais facil?

Valeu.

Seria muito complicado isso o-o…

Explica melhor a aplicação que da pra gente pensar em uma outra forma, não esta parecendo a melhor maneira de resolver seu problema.

[quote=rbarioni]acho que nao me expliquei direito…hehe

Eu preciso editar fisicamente o arquivo Java e adicionar um metodo novo nele.
Tipo, abrir o arquivo mesmo e inserir um metodo ali.

Queria ver se existe algum pacote para manipular as classes mais facil?

Valeu.[/quote]

é tão chato trabalhar pra entender resultados de decompiladores que vc pesa o valor da engenharia reversa disso com o retorno que isso te daria. As vezes não compensa. Melhor pegar e fazer vc mesmo ou ser humilde e ir perguntar pro cara que fez se ele te ensina.

Dá uma olhada no javassist. É possível alterar bytecode. Código fonte não sei se tem alguma API específica não.

Considerando o Java padrão, não existe um jeito fácil. O java não implementa o paradigma de programação reflexiva, portanto, esse tipo de coisa não existe.
Há algumas formas de simular esse comportamento.

A primeira possibilidade seria integrar um motor de scripts no seu código. Essa, provavelmente, é a alternativa que te atenderá. Geralmente, quando precisamos de coisas mais dinâmicas, ou criadas por nossos usuários, nós embarcamos uma linguagem de script como Groovy ou JavaScript. Assim, o usuário pode, em tempo de execução, escrever uma classe (ou implementar uma interface) e nós podemos chamar seus métodos.

Dê uma olhada em:
http://groovy.codehaus.org/Embedding+Groovy
http://docs.oracle.com/javase/7/docs/technotes/guides/scripting/programmer_guide/

O motor da linguagem de script inclui um compilador, e frequentemente a linguagem usada possui mecanismos de inserção de código em tempo de execução. A vantagem também é que uma linguagem de script costuma a ter uma sintaxe mais simples, dinâmica, além de ter mecanismos para controlar políticas de segurança que permitem dizer o quanto o usuário poderá acessar do seu código. Por fim, esses scripts poderiam ser carregados de um arquivo, do banco, da rede, ou mesmo digitados pelo usuário em um editor de textos. Eles também podem ser pré-compilados e deixados na forma binária em algum local para ter sua execução acelerada.

A segunda alternativa seria criar um HashMap<String, Object> de propriedades adicionais. Assim seria possível fazer algo como:

propriedades.put(&quot;Nome&quot;, &quot;Vinícius&quot;); propriedades.put(&quot;calcularSalario&quot;, () -&gt; { return this.salario * this.bonificacao; }); propriedades.put(&quot;calcularAumento&quot;, (taxa) -&gt; { return this.salario *= 1.0 + taxa; });

Claro que usar essas propriedades pode ser um pouco mala, já que você terá que testar por seu tipo. Mas isso é inevitável em código criado em tempo de execução. Ficaria mais simples se você separar mapas diferentes para funções e tipos de dados. Uma chamada (insegura) poderia ser:

//Dá aumento de 5% metodos.get(&quot;calcularAumento&quot;)(0.05);

Outro mecanismo interessante do Java é a criação de Proxies dinâmicos:

Mas estes já devem ser conforme a uma interface especificada por você.

Fora do java padrão, você teria que recorrer a bibliotecas como o já citado JavaAssist.