JAVA获取同一路径下所有子类或接口实现类
2019独角兽企业重金招聘Python工程师标准>>>
整个测试代码如下:
- package find;
- import java.io.File;
- import java.io.IOException;
- import java.net.URL;
- import java.util.ArrayList;
- import java.util.List;
- import find.test.Intf;
- import find.test.Man;
- public class ClassUtil {
- public static void main(String[] args) {
- try {
- System.out.println("接口实现类:");
- for (Class<?> c : getAllAssignedClass(Intf.class)) {
- System.out.println(c.getName());
- }
- System.out.println("子类:");
- for (Class<?> c : getAllAssignedClass(Man.class)) {
- System.out.println(c.getName());
- }
- } catch (ClassNotFoundException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- /**
- * 获取同一路径下所有子类或接口实现类
- *
- * @param intf
- * @return
- * @throws IOException
- * @throws ClassNotFoundException
- */
- public static List<Class<?>> getAllAssignedClass(Class<?> cls) throws IOException,
- ClassNotFoundException {
- List<Class<?>> classes = new ArrayList<Class<?>>();
- for (Class<?> c : getClasses(cls)) {
- if (cls.isAssignableFrom(c) && !cls.equals(c)) {
- classes.add(c);
- }
- }
- return classes;
- }
- /**
- * 取得当前类路径下的所有类
- *
- * @param cls
- * @return
- * @throws IOException
- * @throws ClassNotFoundException
- */
- public static List<Class<?>> getClasses(Class<?> cls) throws IOException,
- ClassNotFoundException {
- String pk = cls.getPackage().getName();
- String path = pk.replace('.', '/');
- ClassLoader classloader = Thread.currentThread().getContextClassLoader();
- URL url = classloader.getResource(path);
- return getClasses(new File(url.getFile()), pk);
- }
- /**
- * 迭代查找类
- *
- * @param dir
- * @param pk
- * @return
- * @throws ClassNotFoundException
- */
- private static List<Class<?>> getClasses(File dir, String pk) throws ClassNotFoundException {
- List<Class<?>> classes = new ArrayList<Class<?>>();
- if (!dir.exists()) {
- return classes;
- }
- for (File f : dir.listFiles()) {
- if (f.isDirectory()) {
- classes.addAll(getClasses(f, pk + "." + f.getName()));
- }
- String name = f.getName();
- if (name.endsWith(".class")) {
- classes.add(Class.forName(pk + "." + name.substring(0, name.length() - 6)));
- }
- }
- return classes;
- }
- }
运行结果如下:
- 接口实现类:
- find.test.impl.IntfImpl2
- find.test.IntfImpl
- 子类:
- find.test.BadMan
- find.test.impl.GoodMan
目录接口如下:
- src
- |----find
- |----ClassUtil.java
- |----test
- |----BadMan.java
- |----impl
- | |----GoodMan.java
- | |----IntfImpl2.java
- |----Intf.java
- |----IntfImpl.java
- |----Man.java
转载于:https://my.oschina.net/bluesroot/blog/222379
JAVA获取同一路径下所有子类或接口实现类相关推荐
- Java获取项目路径下的方法(全)
平时写程序的时候,很多时候提示文件找不到,而抛出了异常,现在整理如下 一 相对路径的获得 说明:相对路径(即不写明时候到底相对谁)均可通过以下方式获得(不论是一般的java项目还是web项目) Str ...
- java获取mavenlib路径,maven install报错致命错误: 在类路径或引导类路径中找不到程序包 java.lang | ZPY博客...
[类文件的搜索路径: C:\Program Files\Java\jdk1.8.0_181\jre\lib\rt.jar:C:\Program Files\Java\jdk1.8.0_181\jre\ ...
- java 获取文件夹下所有文件
java 获取文件夹下所有文件 以下两个函数实现获取文件夹下所有文件 /*** 获取指定文件夹下所有文件,不含文件夹里的文件** @param dirFilePath 文件夹路径* @return*/ ...
- java 取classpath_(转)Java获取CLASSPATH路径
ClassLoader提供了两个方法用于从装载的类路径中取得资源: public URL getResource(String name); public InputStream getResourc ...
- Java 获取当前时间之后的第一个周几,java获取当前日期的下一个周几
Java 获取当前时间之后的第一个周几,java获取当前日期的下一个周几 //获得入参的日期 Calendar cd = Calendar.getInstance(); cd.setTime(date ...
- Java获取文件路径
Java获取文件路径 1.获取当前文件所在的包名 2.获取工程文件夹所在的绝对路径 3.获取当前class文件所在的绝对路径 1.获取当前文件所在的包名 类名.class.getPackage().g ...
- C#中获取指定路径下特定开头和后缀的所有文件
场景 指定一个文件路径,获取当前路径下所有文件,并筛选出以指定内容开头和结尾的文件. 注: 博客主页: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 ...
- java获取当前日期的下一天,以后的第n天
java获取当前日期的下一天,以后的第n天 public static void main(String[] args) {System.out.println(getDate()); } priva ...
- JS播放音频 JS播放mp3 JS播放音乐 Java播放音频 Java播放音乐 Java播放mp3 的jmp123.jar包安装 语音播报 Java获取根路径
JS播放音频 JS播放mp3 // @Bind #jsPlayMp3Btn.onClick !function(self, arg) {var mp3Url = "http://localh ...
最新文章
- c#用canny算子做边缘提取_机器视觉学习(三)边缘检测
- 弯下腰,拾起你无价的尊严
- Myeclipse10.7安装git插件并将Java项目上传到码云(github)
- arpg刷怪爆装备java游戏,刷怪爆装备的单机游戏(大番茄魔改地下城与勇士)
- 计算机组成原理试题解析pdf,计算机组成原理试题集.pdf
- Face Recognition 库-人脸识别
- JS实现自定义右键菜单
- LabWindows/CVI学习总结——前言
- Android NFC 应用程序记录ARR
- Jmeter中运行按钮点了没反应
- 什么是激光波长、激光功率和激光亮度?
- k8s中配置namespace的最小和最大内存
- Linux系统环境准备-包含[close关闭防火墙/配置主机时间/地区/系统语言
- 网站导航如何SEO优化
- WML语言基础(WAP建站)二
- Python实验之——输出数字金字塔
- svm实现图片分类(python)
- string/string.h/cstring头文件的区别摘要
- 信号线上串接电阻的作用
- android x5 视频全屏,腾讯X5浏览器内核全屏播放视频相关问题
热门文章
- 关于ElementUI中MessageBox弹框的取消键盘触发事件(enter,esc)关闭弹窗(执行事件)的解决方法
- 【sql server】“已更新或删除的行值要么不能使该行成为唯一行,要么改变了多个行“ 解决方案
- Permission denied (publickey). 解决方法
- 【亲测有效】无法定位链接器!请检查 tools\link.ini 中的配置是否正确的解决方案
- ubuntu 18.04,无线网卡无驱动,连不上wifi,显示wifi没有适配器的解决方法
- 为什么在Android上的某些设备上使用相机意图捕获的图像会被旋转?
- 将绘图保存到图像文件,而不是使用Matplotlib显示
- 如何检测元素外部的点击?
- win11天气小组件如何开启 Windows11开启天气组件的设置方法
- win11杜比视界音效怎么打开 window11开启杜比视界音效的步骤方法