Refactoring para uma classe .java

6 respostas
alexvingg

Pessoal, estou com um problema. Preciso saber quais os atributos de uma classe java fora de meu projeto. Esta classe vai estar em uma pasta qualquer e eu terei que acessar. ex:

Dessa maneira funciona porque a classe Computador ta dentro do mesmo projeto.

try {
            Class c = Class.forName("freemarker.Computador");
            Field m[] = c.getDeclaredFields();
            for (int i = 0; i < m.length; i++) {
                System.out.println(m[i].getName());
            }
        } catch (Throwable e) {
            System.err.println(e);
        }

Agora teria que ser dessa maneira

try {
            Class c = Class.forName("/home/root/Projetos/app/models/minhaclasse.java");
            Field m[] = c.getDeclaredFields();
            for (int i = 0; i < m.length; i++) {
                System.out.println(m[i].getName());
            }
        } catch (Throwable e) {
            System.err.println(e);
        }

Eu pesquisei não vi como fazer o refactoring em uma classe sem estar “compilada”.
Quem souber uma alternativa valeu. Eu so preciso saber quais são os atributos da classe que vai estar fora do meu projeto.

6 Respostas

vinicius_roc

Realmente não tem como.

Você pode lê-la como se fosse um arquivo de texto.

Ou - não sei se funciona, nunca tentei - compila-la em tempo de execução.

Achei alguns links, não sei se te ajuda

http://www.guj.com.br/java/34335-compilar-classe-java-em-tempo-de-execucao
http://javafree.uol.com.br/topic-859039-compilar-e-instanciar-em-tempo-de-execucao.html

Espero ter ajudado

Abss

alexvingg

imaginei isso. O problema que essa classe ta em outro projeto não tenho como compilar em tempo de execução.
to procurando uma saída aqui valeu.

ViniGodoy

Se você precisa de algo assim, é melhor usar uma linguagem de script, como o Groovy:
http://www.pontov.com.br/site/index.php/java/47-javageral/165-utilizando-scripts-nos-jogos

Se você tiver um arquivo .class, pode também carregar a classe através de um classloader.

O class.forName só funciona para classes que já estão no classpath, isso é, que podem ser carregadas pelo classloader da sua aplicação.

mathiasnw

Será que usando o ClassLoader não resolve??

http://javafree.uol.com.br/artigo/876400/ClassLoader-Desmitificado.html

Teria que compilar e depois carregar a classe.

melhor usar a linguagem de script como o Vini comentou

alexvingg

Compilar a classe não tem como. Ela está dentro de outro projeto e este projeto eu não consigo compilar. É um projeto em play.

alexvingg

Pessoal consegui !

http://ws.apache.org/jaxme/js/jparser.html

isso ai resolveu meu problema ! Valeu

Criado 14 de abril de 2011
Ultima resposta 15 de abr. de 2011
Respostas 6
Participantes 4