..classes de um pacote via REFLECTION

…pessoas, bom dia

…alguém ai sabe como eu faço pra pegar o nome de todas as classes de um determinado pacote via Reflection ??? …tentei usar Package pa = Package.getPackage("nome.do.meu.pacote"); consegui pegar o pacote mas o que quero mesmo é capturar o nome de todas as classes contidas neste pacote …

…se alguém souber ajuda ai … valeu !!! :wink:

Velinho,

fiquei curioso para saber como fazer, pesquisei na net um pouco e não achei nada decente pra fazer isso.

Tenta isto: http://jonpeck.com/forum/viewtopic.php?t=88

Eu particularmente achei muito podre esta solução, mas…

A propósito, a reflection serve para você a partir do nome instânciar classes e invocar métodos.

…valeu !!! 8)

da uma olhada no codigo abaixo…

[code]/*

  • ClassesDoPacote.java
  • Created on July 24, 2007, 10:04 AM

*/

package br.com.maxiconsystems.embarcador.util;

import java.io.File;
import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
import java.util.ArrayList;

/**
*

  • @author diego
    */
    public class ClassesDoPacote {

    public ClassesDoPacote() {
    try {

         Class[] classes = getClasses("br.com.maxiconsystems.embarcador.modelo");
         for (int i = 0; i < classes.length; i++) {
             
             //System.out.println(classes[i].getName());
             
         }
     } catch (ClassNotFoundException ex) {
         ex.printStackTrace();
     }
    

    }

    public static Class[] getClasses(String pckgname) throws ClassNotFoundException {
    ArrayList classes=new ArrayList();
    // Get a File object for the package
    File directory=null;
    try {
    directory=new File(Thread.currentThread().getContextClassLoader().getResource(pckgname.replace(’.’, ‘/’)).getFile());
    } catch(NullPointerException x) {
    throw new ClassNotFoundException(pckgname+" does not appear to be a valid package1");
    }
    if(directory.exists()) {
    // Get the list of the files contained in the package
    String[] files=directory.list();
    for(int i=0; i<files.length; i++) {
    // we are only interested in .class files
    if(files[i].endsWith(".class")) {
    // removes the .class extension
    //classes.add(Class.forName(pckgname+’.’+files[i].substring(0, files[i].length()-6)));

                 Field[] campos = null;
                 System.out.println("Tabela: "+files[i].substring(0, files[i].length()-6));
                 campos = Class.forName(pckgname+'.'+files[i].substring(0, files[i].length()-6)).getFields(); // getDeclaredFields();
                 for (int j =0; j < campos.length; j++) {
                     System.out.println(campos[j].getName());
                 }
                 
                 classes.add(Class.forName(pckgname+'.'+files[i].substring(0, files[i].length()-6)));
             }
         }
     } else {
         throw new ClassNotFoundException(pckgname+" does not appear to be a valid package2");
     }
     Class[] classesA=new Class[classes.size()];
     classes.toArray(classesA);
     return classesA;
    

    }

    public static void main(String args[]) {
    java.awt.EventQueue.invokeLater(new Runnable() {
    public void run() {
    new ClassesDoPacote();
    }
    });
    }

}
[/code]

…esta solução so funciona pra pacotes da própria aplicação, se o pacote estiver no classPath não adianta muito :cry: , vou ter que achar outra solução que faça isso, dado o nome de um pacote (estando ou não no classPath) busque o nome das classes contidas no mesmo !!!
…se conseguir eu posto aqui !!!