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.
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