java 类遍历_Java中遍历访问类几种常用方式的实现工具类ClassUtil

该工具类ClassUtil提供在当前类或接口遍历所有类信息、根据包名查询出所有类信息及获取指定目录&包路径下的所有类等几种方式,详情代码如下package xwood;@b@@b@import java.io.File;@b@import java.io.IOException;@b@import java.net.URL;@b@import java.util.ArrayList;@b@import java.util.Enumeration;@b@import java.util.List;@b@ @b@public class ClassUtil {@b@    @b@    /**@b@     * 获取到当前类或接口的所有子类@b@     * @param c@b@     * @return@b@     * @throws ClassNotFoundException@b@     * @throws IOException@b@     */@b@    public static List> getAllClasses(Class> c) throws ClassNotFoundException,IOException{@b@        List> cls = new ArrayList>();@b@        String packageName = c.getPackage().getName();@b@        List> allClass = getClasses(packageName);@b@        for(int i = 0; i > getClasses(String packageName) throws ClassNotFoundException,IOException{@b@        ClassLoader classLoader = Thread.currentThread().getContextClassLoader();@b@        String path = packageName.replace(".", "/");@b@        Enumeration resources = classLoader.getResources(path);@b@        List dirs = new ArrayList();@b@        while(resources.hasMoreElements()){@b@            URL resource = resources.nextElement();@b@            dirs.add(new File(resource.getFile()));@b@        }@b@        List> classes = new ArrayList>();@b@        for(File directory:dirs){@b@            classes.addAll(findClass(directory, packageName));@b@        }@b@        return classes;@b@    }@b@    @b@    /**@b@     * 获取指定目录&包路径下的所有类@b@     * @param directory 文件目录路径@b@     * @param packageName 包名路径@b@     * @return@b@     * @throws ClassNotFoundException@b@     */@b@    private static  List> findClass(File directory, String packageName) @b@        throws ClassNotFoundException{@b@        List> classes = new ArrayList>();@b@        if(!directory.exists()){@b@            return classes;@b@        }@b@        File[] files = directory.listFiles();@b@        for(File file:files){@b@            if(file.isDirectory()){@b@                assert !file.getName().contains(".");@b@                classes.addAll(findClass(file, packageName+"."+file.getName()));@b@            }else if(file.getName().endsWith(".class")){@b@                classes.add(Class.forName(packageName+"."+file.getName().substring(0,file.getName().length()-6)));@b@            }@b@        }@b@        return classes;@b@    }@b@    @b@    public static void main(String[] args) throws Exception{@b@        //测试打印xwood包下面类@b@        List> _class=getClasses("xwood");@b@        for(Class cla:_class)@b@            System.out.println(cla.toString());@b@        @b@    }@b@    @b@}

测试打印xwood包下面类名称,控制台结果class xwood.ClassUtil@b@class xwood.MethodInvoker@b@interface xwood.MyMethod@b@class xwood.Test

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值