..classes de um pacote via REFLECTION

4 respostas
breffo

…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:

4 Respostas

abreumania

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.

breffo

…valeu !!! 8)

D

da uma olhada no codigo abaixo...

/*
 * 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();
            }
        });
    }
    
}
breffo

…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 !!!

Criado 4 de outubro de 2007
Ultima resposta 4 de out. de 2007
Respostas 4
Participantes 3