Listar Classes no ClassPath

4 respostas
L

Pessoal,

Estou precisando obter uma lista em Runtime de classes que implementam uma Interface específica ?

alguma dica ?

abs
Leandro

4 Respostas

jcatino

Leandrinho, vê se os fontes que fiz servem para o que está procurando fazer.

E aí, mudando de assunto, tá enrolando a mina ainda ou já casou de uma vez?

Na outra semana nasceu Guilherme, o meu filho: http://juliancatino.fotos.uol.com.br/guilherme

Espero que esteja tudo certo c/vc e sua familia, grande abraço!

G

lfranchi,

Isso pode ser complicado. Se você quiser essa informação a respeito de todas as classes carregadas, você pode escrever um classloader que, durante a carga da classe, testa essa condição e guarda a informação.

O melhor jeito de fazer isso é chamar o Class#isAssignableFrom da tua interface já dentro do findClass, logo após delegar a busca para o classloader pai ou definir a classe você mesmo. getInterfaces não funciona neste caso, já que esse método só devolve as interfaces imediatamente declaradas pela classe (e pode ser que a interface que vc está procurando seja superinterface de uma delas, ou implementada por uma super-super-classe, etc.).

Agora, se vc quiser a informação de classes não carregadas, você vai ter que parsear os bytecodes. Daí sugiro o ASM ou o BCEL. Se bem que o BCEL aparentemente morreu, fora que o ASM é bem mais eficiente (embora talvez um pouco inconveniente, dependendo da manipulação).

Abraços,

L

Obrigado pelas respostas!

Sobre o tópico postado pelo Julian, ainda não é o que eu precisava, e sim o inverso disso. Eu sei o nome da interface, e gostaria de encontrar todas as classes carregadas pelo ClassLoader que a implementam.

Sobre o segundo, do Giuliano, vou fazer uns testes com o ClassLoader, mais achei muito trabalhoso para o que estou precisando.

De qualquer forma todos foram de grande proveito!

Obrigado!

Julian, te mandei e-mail… abs!

chun

isso vai te ajudar:

http://forum.java.sun.com/thread.jspa?threadID=341935&start=15

Criado 9 de março de 2007
Ultima resposta 21 de mar. de 2007
Respostas 4
Participantes 4