Gostaria de saber como obter o nome de todas as classes contidas em um diretório (armazena-las em um array de objetos) para depois carregar dinamicamente a classe que eu desejar…Também gostaria de fazer isto sem a utilização de API de terceiros…
Para ter um array com todos os .class de um diretorio basta vc usar o metodo listFiles() com um filtro para arquivos .class .
Para vc carregar as classes vc deve usar um ClassLoader especifico como o URLClassLoader, que carrega recursos atravéz de URLs para os mesmos.
Seria mais ou menos assim :
[code]
File fDirectory = new File( "/meu/diretorio/de/classes");
File [] files = fDirectory.listFiles( filtroDeArquivosClass );
// faz-se uma iteração no vetor para construir um vetor de URLs...
URLClassLoader loader = new URLClassLoader( vetorDeURLs );
Object obj = Class.forName( "nome.da.minha.classe", loader ).newInstance();
[/code]
Bem, como vc viu colocamos a referencia em um tipo Object, pois não conhecemos o tipo que estamos carregando.
Dessa forma, se a classe carregada não implementar uma interface conhecida, ela não será muito util.
Como um exemplo disso, podemos citar os drivers JDBC, que podemos carregar desta forma, pois usamos suas referencias atravéz das interfaces padrão JDBC, que vem no pacote java.sql.
Se alguem conhecer outra técnica gostaria de conhecer.
O método Class.forName() ou algum outro da classe ClassLoader consegue encontrar uma classe específica, a qual, está contida um arquivo .jar???