Can you find all classes in a package using reflection?

前端 未结 27 2160
不知归路
不知归路 2020-11-21 05:24

Is it possible to find all classes or interfaces in a given package? (Quickly looking at e.g. Package, it would seem like no.)

27条回答
  •  独厮守ぢ
    2020-11-21 05:49

    I just wrote a util class, it include test methods, you can have a check ~

    IteratePackageUtil.java:

    package eric.j2se.reflect;
    
    import java.util.Set;
    
    import org.reflections.Reflections;
    import org.reflections.scanners.ResourcesScanner;
    import org.reflections.scanners.SubTypesScanner;
    import org.reflections.util.ClasspathHelper;
    import org.reflections.util.ConfigurationBuilder;
    import org.reflections.util.FilterBuilder;
    
    /**
     * an util to iterate class in a package,
     * 
     * @author eric
     * @date Dec 10, 2013 12:36:46 AM
     */
    public class IteratePackageUtil {
        /**
         * 

    * Get set of all class in a specified package recursively. this only support lib *

    *

    * class of sub package will be included, inner class will be included, *

    *

    * could load class that use the same classloader of current class, can't load system packages, *

    * * @param pkg * path of a package * @return */ public static Set> getClazzSet(String pkg) { // prepare reflection, include direct subclass of Object.class Reflections reflections = new Reflections(new ConfigurationBuilder().setScanners(new SubTypesScanner(false), new ResourcesScanner()) .setUrls(ClasspathHelper.forClassLoader(ClasspathHelper.classLoaders(new ClassLoader[0]))) .filterInputsBy(new FilterBuilder().includePackage(pkg))); return reflections.getSubTypesOf(Object.class); } public static void test() { String pkg = "org.apache.tomcat.util"; Set> clazzSet = getClazzSet(pkg); for (Class clazz : clazzSet) { System.out.println(clazz.getName()); } } public static void main(String[] args) { test(); } }

提交回复
热议问题