Pesquisa por Classes de Implementação

2 respostas
gulira

Pessoa existe alguma maneira de saber quais classes que estão classpath que implementa determinada interface?
Por exemplo:
Interface X
Classe Y, Z e etc… implementa X.
Gostaria de saber todas as classes que implementam X e instância-las.
Dei uma olhada no ClassLoader, mas não tem nada que resolva isto.

value

2 Respostas

T

Esse é um problema semelhante ao problema de achar todas as classes de um pacote; alguém já resolveu isso aqui no fórum, e foi meio cavernoso, porque ele teve de pegar o classpath, olhar todos os arquivos .jar e diretórios que estão no classpath, abrir .class por .class, carregar um por um usando Class.forName (existe uma versão que não chama os inicializadores da classe - use-a para evitar problemas), e então, usando instanceof, checar se a tal interface é implementada.

Eu seria um pouco mais preguiçoso e limitaria esse problema a checar não o CLASSPATH inteiro, mas apenas um determinado JAR (que pode ou não estar no CLASSPATH). Se esse JAR não estiver no CLASSPATH aí você é obrigado a criar um classloader separado, mas acredite: isso é mais fácil que varrer todo o CLASSPATH.

gulira

thingol:
Esse é um problema semelhante ao problema de achar todas as classes de um pacote; alguém já resolveu isso aqui no fórum, e foi meio cavernoso, porque ele teve de pegar o classpath, olhar todos os arquivos .jar e diretórios que estão no classpath, abrir .class por .class, carregar um por um usando Class.forName (existe uma versão que não chama os inicializadores da classe - use-a para evitar problemas), e então, usando instanceof, checar se a tal interface é implementada.

Eu seria um pouco mais preguiçoso e limitaria esse problema a checar não o CLASSPATH inteiro, mas apenas um determinado JAR (que pode ou não estar no CLASSPATH). Se esse JAR não estiver no CLASSPATH aí você é obrigado a criar um classloader separado, mas acredite: isso é mais fácil que varrer todo o CLASSPATH.

Valeu thingol, analisei sua opinião e eu achei melhor criar um arquivo properties para resolver meu problema.
Eu tenho q criar um sistema modular(.jar) e dentro desse jar teria somente uma classe que implementa essa interface, pois ela define o contrato de definição de menu do modulo, então para não ter q ficar comendo recursos e tempo para pesquisar uma simples classe de um determinado jar, vou criar um properties ou utilizar o META-INF para indicar qual classe que implementa a interface q define o menu do modulo. A idéia do modulo é parecido com plugin

Não sei se deu para entender :slight_smile:

E desculpe ai pela demora do replay.

Criado 14 de outubro de 2008
Ultima resposta 21 de out. de 2008
Respostas 2
Participantes 2