package _02;

import java.io.File;
import java.net.URL; public class MainTest_FindAllSubClass {
public static void main(String[] args) { Class<?> clazz = MainTest_FindAllSubClass.class;
// 定位到当前的包路径
// URL url = Toy.class.getResource(""); // 定位到bin目录
URL url = clazz.getResource("/");
System.out.println(url); String fileName = url.getFile();
System.out.println(fileName); String pathName = fileName.replaceFirst("/", "");
System.out.println(pathName); File rootFile = new File(pathName); setSubList(rootFile, rootFile.getPath() + "\\", clazz);
} /**
* 遍历bin目录下所有文件
* 若是文件夹,则递归将文件夹内文件添加到文件数组
* 若是文件,则将文件加载并强制类型转换为要查找子类的父类,转换无异常,说明加载类是父类的子类
* (当遍历到类自身时,此处认为也属于子类,当然这是我的一厢情愿,我肯定不告诉你--〉我嫌麻烦。。
* 不过我还是加上了判断--〉自我要求比较高。。
* )
* */
public static <T> void setSubList(File rootFile, String parentDirectory,
Class<T> parentClass) {
if (rootFile.isDirectory()) {
File[] files = rootFile.listFiles();
for (File file : files) {
setSubList(file, parentDirectory, parentClass);
}
} else {
String className = null;
try {
if (rootFile.getPath().indexOf(".class") != -1) {
className = rootFile.getPath().replace(parentDirectory, "")
.replace(".class", "").replace("\\", ".");
Class<?> classObject = Class.forName(className);
classObject.asSubclass(parentClass); // 要么是子类,要么是类本身
if (! className.equals(parentClass.getCanonicalName())){
System.out
.println(className + " extends " + parentClass);
}else{
System.out
.println(className + " is " + parentClass);
}
}
} catch (ClassNotFoundException e) {
System.err.println("can not find " + className);
} catch (ClassCastException e) {
System.err.println(className + " do not extends " + parentClass);
}
}
}
} // 测试
class Sub1 extends MainTest_FindAllSubClass {
} //测试
class Sub2 extends MainTest_FindAllSubClass {
}

  

java 查找类的所有子类的更多相关文章

  1. 9、Java 常用类 Math,Number子类,String,Character

    本小节主要介绍一些如何去使用Java提供的类如何去使用?如何在实战中使用?从来没有用过的如何去学习? 分享一下发哥的学习方法? 1.针对性的学习 在理解自己的需求或者要做某一块的内容后,有针对性,选择 ...

  2. 分析Java的类加载器与ClassLoader(二):classpath与查找类字节码的顺序,分析ExtClassLoader与AppClassLoader的源码

    先回顾一下classpath classpath的作用: classpath的作用是指定查找类的路径:当使用java命令执行一个类(类中的main方法)时,会从classpath中进行查找这个类. 指 ...

  3. 【Java并发工具类】原子类

    前言 为保证计数器中count=+1的原子性,我们在前面使用的都是synchronized互斥锁方案,加锁独占访问的方式未免太过霸道,于是我们来介绍另一种解决原子性问题的无锁方案:原子变量.在正式介绍 ...

  4. Java: 基类、子类、构造函数、程序块的初始化顺序

    初始化顺序 基类static block 子类static block 基类non-static block 子类non-static block 基类constructor 子类constructo ...

  5. Java JVM 类的连接与初始化 [ 转载 ]

    Java类的连接与初始化 (及2013阿里初始化笔试题解析)  转自http://www.cnblogs.com/iceAeterNa/p/4876747.html         Java虚拟机通过 ...

  6. Java虚拟机类装载的原理及实现(转)

    Java虚拟机类装载的原理及实现(转) 一.引言 Java虚拟机(JVM)的类装载就是指将包含在类文件中的字节码装载到JVM中, 并使其成为JVM一部分的过程.JVM的类动态装载技术能够在运行时刻动态 ...

  7. java class类和object类

    Class类 介绍 Java的Class类是java反射机制的基础,通过Class类我们可以获得关于一个类的相关信息 Java.lang.Class是一个比较特殊的类,它用于封装被装入到JVM中的类( ...

  8. Java Calendar类的使用总结【转】

    感谢!原文地址:https://www.cnblogs.com/huangminwen/p/6041168.html Java Calendar类的使用总结 在实际项目当中,我们经常会涉及到对时间的处 ...

  9. Java常用类的使用

    Java常用类 1. Optional 在我们的开发中,NullPointerException可谓是随时随处可见,为了避免空指针异常,我们常常需要进行 一 些防御式的检查,所以在代码中常常可见if( ...

随机推荐

  1. SparkStreaming+Kafa+HBase

    1. 总结一些概念: 安装zookeeper3.4.6 cp zoo_sample.cfg zoo.cfgvim zoo.cfg tickTime=2000initLimit=10syncLimit= ...

  2. ViewPager + TabLayout + Fragment + MediaPlayer的使用

    效果图 在gradle里导包  implementation 'com.android.support:design:28.0.0' activity_main <?xml version=&q ...

  3. rocketmq双主模式

    1.官网 https://rocketmq.apache.org/ 官方安装文档 https://rocketmq.apache.org/docs/quick-start/ 2.rocketmq多主配 ...

  4. mpvue——引入echarts图表

    安装 mpvue-echarts的github地址 https://github.com/F-loat/mpvue-echarts $ cnpm install mpvue-echarts $ cnp ...

  5. 【XSY3042】石像 拓扑排序 状压DP 洲阁筛

    题目大意 有 \(n\) 个整数 \(a_1,a_2,\ldots,a_n\),每个数的范围是 \([1,m]\).还有 \(k\) 个限制,每个限制 \(x_i,y_i\) 表示 \(a_{x_i} ...

  6. Magento2 常见错误 ----- 定期更新

    1.静态文件有版本号,静态文件不能读取,页面无法显示.如下图: 解决方案:其实URL里的版本号对于magento来说是合法的,这是因为我们缺少了一个文件\pub\static\.htaccess:导致 ...

  7. JDK源码分析(7)String

    String String表示字符串,Java中所有字符串的字面值都是String类的实例,例如"ABC".字符串是常量,在定义后不能被改变,字符串缓冲区支持可变的字符串.因为St ...

  8. Java基础 -- 访问控制权限

    一  包:库单元 假设我们存在两个类名相同的类,如果没有一定的措施对其进行区分,就会无法区别到底使用的是哪一个类.因此java引入了包来进行名字空间管理. 包(类库)包含有一组类,这些类在单一的名字空 ...

  9. spring-boot-devtools在Idea中热部署方法

    1 pom.xml文件 注:热部署功能spring-boot-1.3开始有的 <!--添加依赖--> <dependency> <groupId>org.sprin ...

  10. pillow的用法

    这是原图 from PIL import Image im=Image.open('C:/Users/history/Desktop/微信图片_20190408110611.jpg') r,g,b=i ...