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. CentOS 7 rpm -i 时 警告warning: /var/tmp/rpm-tmp.z7O820: Header V4 RSA/SHA512 Signature, key ID a14fe591: NOKEY 解决方法

    这是由于yum安装了旧版本的GPG keys造成的,解决办法就是 运行下面命令即可 # rpm --import /etc/pki/rpm-gpg/RPM* 查询已安装的rpm源 # rpm -qa ...

  2. Python——模块——随机模块

    1.引用模块 import random 2.随机整数 random.randint(a,b) 3.随机浮点数 random.uniform(a,b) 4.从列表中随机取元素 random.choic ...

  3. pycharm项目上传到Github

    使用本地代码直接share到github上过程中出现了一个问题: Successfully created project 'xxx' on GitHub, but initial push fail ...

  4. Flask 视图,中间件

    视图 FBV def index(nid): """ 请求相关信息 request.method # 请求方式 request.args # get 方式的参数获取 re ...

  5. oneinstack 安装 https-certbot

    免费https?   官方安装教程:https://certbot.eff.org/#centos6-nginx (以下是说明安装时遇到的): 下载并修改文件权限 wget https://dl.ef ...

  6. Luogu P4643 【模板】动态dp

    题目链接 Luogu P4643 题解 猫锟在WC2018讲的黑科技--动态DP,就是一个画风正常的DP问题再加上一个动态修改操作,就像这道题一样.(这道题也是PPT中的例题) 动态DP的一个套路是把 ...

  7. JS 防抖函数和节流函数

    文章转载自:木上有水 什么是防抖?什么是节流? 工作中我们经常会用一些方法监听某些事件的完成,比如scroll.resize.keyup等. 常规事件触发的时候,比如scroll,会在短时间内触发多次 ...

  8. 网页换肤,模块换肤,jQuery的Cookie插件使用(转)

    具体效果如下: 第一次加载如下图: 然后点击天蓝色按钮换成天蓝色皮肤如下图: 然后关闭网页重新打开或者在打开另一个网页如下图: 因为皮肤用Cookie保存了下来,所以不会重置 具体的实现代码如下: & ...

  9. 解决js复制在安卓和ios兼容问题

    var clipboard = new ClipboardJS('.fr', { // target: function() { // return document.querySelector('d ...

  10. eMMC真能优化成UFS?谈谈手机闪存的文件系统

    和UFS闪存相比,eMMC的性能更弱,同一型号的手机混用这两种规格的闪存,让一些消费者感到了不满.对此,厂商称通过优化,eMMC的产品也可以获得优秀的体验.这个优化到底是怎么回事?根据以往的一些宣传, ...