博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
代码片段,得到所有实现接口且在同包下的类
阅读量:5139 次
发布时间:2019-06-13

本文共 1992 字,大约阅读时间需要 6 分钟。

/**     * 得到所有实现接口而且在同包下的的类     * @param aClass     * @return     * @throws IOException     * @throws ClassNotFoundException     */    public List
getImplClass(Class aClass) throws IOException, ClassNotFoundException { List
list = new ArrayList<>(); List
resultList = new ArrayList<>(); String aPackage=aClass.getPackage().getName(); ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); Enumeration
enumeration =classLoader.getResources(aPackage.replaceAll("\\.","/")); while (enumeration.hasMoreElements()) { list.addAll(findClass(enumeration.nextElement().getPath(), aPackage)); } for (Class c:list) { if (isImplInterface(c) && !aClass.equals(c) && !resultList.contains(c)) { resultList.add(c); } } resultList.add(0,Class.forName("com.huawei.SysCode")); return resultList; } private boolean isImplInterface(Class aClass) { Class[] classes=aClass.getInterfaces(); for (Class c : classes) { if(INTERFACE_CLASS.equals(c.getName()) { return true; } } return false; } /** * 得到路径下所有class * @param dir * @param packageName * @return * @throws ClassNotFoundException */ private List
findClass(String dir, String packageName) throws ClassNotFoundException { List
list = new ArrayList<>(); File f = new File(dir); if (!f.exists()) { return list; } File[] files=f.listFiles(); for (File file : files) { if (file.isDirectory())) { list.addAll(findClass(file.getPath(), packageName+"."+file.getName())); }else if(file.getName().matches(".+\\.class$")){ list.add(Class.forName(packageName+"."+file.getName().replaceAll("\\.class$",""))); } } return list; }

  

转载于:https://www.cnblogs.com/zhangminjie/p/4349170.html

你可能感兴趣的文章
STM32单片机使用注意事项
查看>>
移动开发平台-应用之星app制作教程
查看>>
springboot No Identifier specified for entity的解决办法
查看>>
如何在maven工程中加载oracle驱动
查看>>
一句话说清分布式锁,进程锁,线程锁
查看>>
服务器解析请求的基本原理
查看>>
[HDU3683 Gomoku]
查看>>
下一代操作系统与软件
查看>>
Python IO模型
查看>>
DataGridView的行的字体颜色变化
查看>>
[Serializable]的应用--注册码的生成,加密和验证
查看>>
Android-多线程AsyncTask
查看>>
LeetCode【709. 转换成小写字母】
查看>>
如果没有按照正常的先装iis后装.net的顺序,可以使用此命令重新注册一下:
查看>>
【题解】青蛙的约会
查看>>
autopep8
查看>>
Android 官方新手指导教程
查看>>
幸运转盘v1.0 【附视频】我的Android原创处女作,请支持!
查看>>
安装 Express
查看>>
存储(硬件方面的一些基本术语)
查看>>