2019独角兽企业重金招聘Python工程师标准>>>

整个测试代码如下:

Java代码  
  1. package find;
  2. import java.io.File;
  3. import java.io.IOException;
  4. import java.net.URL;
  5. import java.util.ArrayList;
  6. import java.util.List;
  7. import find.test.Intf;
  8. import find.test.Man;
  9. public class ClassUtil {
  10. public static void main(String[] args) {
  11. try {
  12. System.out.println("接口实现类:");
  13. for (Class<?> c : getAllAssignedClass(Intf.class)) {
  14. System.out.println(c.getName());
  15. }
  16. System.out.println("子类:");
  17. for (Class<?> c : getAllAssignedClass(Man.class)) {
  18. System.out.println(c.getName());
  19. }
  20. } catch (ClassNotFoundException e) {
  21. // TODO Auto-generated catch block
  22. e.printStackTrace();
  23. } catch (IOException e) {
  24. // TODO Auto-generated catch block
  25. e.printStackTrace();
  26. }
  27. }
  28. /**
  29. * 获取同一路径下所有子类或接口实现类
  30. *
  31. * @param intf
  32. * @return
  33. * @throws IOException
  34. * @throws ClassNotFoundException
  35. */
  36. public static List<Class<?>> getAllAssignedClass(Class<?> cls) throws IOException,
  37. ClassNotFoundException {
  38. List<Class<?>> classes = new ArrayList<Class<?>>();
  39. for (Class<?> c : getClasses(cls)) {
  40. if (cls.isAssignableFrom(c) && !cls.equals(c)) {
  41. classes.add(c);
  42. }
  43. }
  44. return classes;
  45. }
  46. /**
  47. * 取得当前类路径下的所有类
  48. *
  49. * @param cls
  50. * @return
  51. * @throws IOException
  52. * @throws ClassNotFoundException
  53. */
  54. public static List<Class<?>> getClasses(Class<?> cls) throws IOException,
  55. ClassNotFoundException {
  56. String pk = cls.getPackage().getName();
  57. String path = pk.replace('.', '/');
  58. ClassLoader classloader = Thread.currentThread().getContextClassLoader();
  59. URL url = classloader.getResource(path);
  60. return getClasses(new File(url.getFile()), pk);
  61. }
  62. /**
  63. * 迭代查找类
  64. *
  65. * @param dir
  66. * @param pk
  67. * @return
  68. * @throws ClassNotFoundException
  69. */
  70. private static List<Class<?>> getClasses(File dir, String pk) throws ClassNotFoundException {
  71. List<Class<?>> classes = new ArrayList<Class<?>>();
  72. if (!dir.exists()) {
  73. return classes;
  74. }
  75. for (File f : dir.listFiles()) {
  76. if (f.isDirectory()) {
  77. classes.addAll(getClasses(f, pk + "." + f.getName()));
  78. }
  79. String name = f.getName();
  80. if (name.endsWith(".class")) {
  81. classes.add(Class.forName(pk + "." + name.substring(0, name.length() - 6)));
  82. }
  83. }
  84. return classes;
  85. }
  86. }

运行结果如下:

Java代码  
  1. 接口实现类:
  2. find.test.impl.IntfImpl2
  3. find.test.IntfImpl
  4. 子类:
  5. find.test.BadMan
  6. find.test.impl.GoodMan

目录接口如下:

Java代码  
  1. src
  2. |----find
  3. |----ClassUtil.java
  4. |----test
  5. |----BadMan.java
  6. |----impl
  7. |    |----GoodMan.java
  8. |    |----IntfImpl2.java
  9. |----Intf.java
  10. |----IntfImpl.java
  11. |----Man.java

转载于:https://my.oschina.net/bluesroot/blog/222379

JAVA获取同一路径下所有子类或接口实现类相关推荐

  1. Java获取项目路径下的方法(全)

    平时写程序的时候,很多时候提示文件找不到,而抛出了异常,现在整理如下 一 相对路径的获得 说明:相对路径(即不写明时候到底相对谁)均可通过以下方式获得(不论是一般的java项目还是web项目) Str ...

  2. 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\ ...

  3. java 获取文件夹下所有文件

    java 获取文件夹下所有文件 以下两个函数实现获取文件夹下所有文件 /*** 获取指定文件夹下所有文件,不含文件夹里的文件** @param dirFilePath 文件夹路径* @return*/ ...

  4. java 取classpath_(转)Java获取CLASSPATH路径

    ClassLoader提供了两个方法用于从装载的类路径中取得资源: public URL getResource(String name); public InputStream getResourc ...

  5. Java 获取当前时间之后的第一个周几,java获取当前日期的下一个周几

    Java 获取当前时间之后的第一个周几,java获取当前日期的下一个周几 //获得入参的日期 Calendar cd = Calendar.getInstance(); cd.setTime(date ...

  6. Java获取文件路径

    Java获取文件路径 1.获取当前文件所在的包名 2.获取工程文件夹所在的绝对路径 3.获取当前class文件所在的绝对路径 1.获取当前文件所在的包名 类名.class.getPackage().g ...

  7. C#中获取指定路径下特定开头和后缀的所有文件

    场景 指定一个文件路径,获取当前路径下所有文件,并筛选出以指定内容开头和结尾的文件. 注: 博客主页: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 ...

  8. java获取当前日期的下一天,以后的第n天

    java获取当前日期的下一天,以后的第n天 public static void main(String[] args) {System.out.println(getDate()); } priva ...

  9. JS播放音频 JS播放mp3 JS播放音乐 Java播放音频 Java播放音乐 Java播放mp3 的jmp123.jar包安装 语音播报 Java获取根路径

    JS播放音频 JS播放mp3 // @Bind #jsPlayMp3Btn.onClick !function(self, arg) {var mp3Url = "http://localh ...

最新文章

  1. c#用canny算子做边缘提取_机器视觉学习(三)边缘检测
  2. 弯下腰,拾起你无价的尊严
  3. Myeclipse10.7安装git插件并将Java项目上传到码云(github)
  4. arpg刷怪爆装备java游戏,刷怪爆装备的单机游戏(大番茄魔改地下城与勇士)
  5. 计算机组成原理试题解析pdf,计算机组成原理试题集.pdf
  6. Face Recognition 库-人脸识别
  7. JS实现自定义右键菜单
  8. LabWindows/CVI学习总结——前言
  9. Android NFC 应用程序记录ARR
  10. Jmeter中运行按钮点了没反应
  11. 什么是激光波长、激光功率和激光亮度?
  12. k8s中配置namespace的最小和最大内存
  13. Linux系统环境准备-包含[close关闭防火墙/配置主机时间/地区/系统语言
  14. 网站导航如何SEO优化
  15. WML语言基础(WAP建站)二
  16. Python实验之——输出数字金字塔
  17. svm实现图片分类(python)
  18. string/string.h/cstring头文件的区别摘要
  19. 信号线上串接电阻的作用
  20. android x5 视频全屏,腾讯X5浏览器内核全屏播放视频相关问题

热门文章

  1. 关于ElementUI中MessageBox弹框的取消键盘触发事件(enter,esc)关闭弹窗(执行事件)的解决方法
  2. 【sql server】“已更新或删除的行值要么不能使该行成为唯一行,要么改变了多个行“ 解决方案
  3. Permission denied (publickey). 解决方法
  4. 【亲测有效】无法定位链接器!请检查 tools\link.ini 中的配置是否正确的解决方案
  5. ubuntu 18.04,无线网卡无驱动,连不上wifi,显示wifi没有适配器的解决方法
  6. 为什么在Android上的某些设备上使用相机意图捕获的图像会被旋转?
  7. 将绘图保存到图像文件,而不是使用Matplotlib显示
  8. 如何检测元素外部的点击?
  9. win11天气小组件如何开启 Windows11开启天气组件的设置方法
  10. win11杜比视界音效怎么打开 window11开启杜比视界音效的步骤方法