Pessoal,
Estou precisando obter uma lista em Runtime de classes que implementam uma Interface específica ?
alguma dica ?
abs
Leandro
Pessoal,
Estou precisando obter uma lista em Runtime de classes que implementam uma Interface específica ?
alguma dica ?
abs
Leandro
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!
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,
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!
isso vai te ajudar:
http://forum.java.sun.com/thread.jspa?threadID=341935&start=15