根据父类获取同一个包(包括子包)下所有子类
来源:互联网 发布:js arguments 回调函数 编辑:程序博客网 时间:2024/06/14 15:39
声明:文章内容全都是自己的学习总结,如有不对的地方请大家帮忙指出。有需要沟通交流的可加我QQ群:425120333 Java语言的三大特性是继承、封装、多态。继承指的是子类通过关键字extends继承父类、或者是implements实现接口。不管是继承父类还是实现接口,子类和父类都是建立了联系。这里提供了一个根据父类的类信息获取同一个包下的所有子类的信息,
import java.io.File;import java.io.IOException;import java.net.URL;import java.util.ArrayList;import java.util.Enumeration;import java.util.List;/** * @author 顽石的坚持 * @date 2017年4月27日 * @introduce:根据父类的类文件获取所以的子类类文件集合,要求父类和子类在同一个包中,或者子类在子包中 */public class ClassUtil { @SuppressWarnings({ "unchecked", "rawtypes" }) public static List<Class> getSonClass(Class fatherClass) { List<Class> sonClassList = new ArrayList<Class>(); String packageName = fatherClass.getPackage().getName(); List<Class> packageClassList = getPackageClass(packageName); for (Class clazz : packageClassList) { if (fatherClass.isAssignableFrom(clazz) && !fatherClass.equals(clazz)) { sonClassList.add(clazz); } } return sonClassList; } @SuppressWarnings({ "rawtypes" }) private static List<Class> getPackageClass(String packageName) { ClassLoader loader = ClassUtil.class.getClassLoader(); String path = packageName.replace(".", "/"); Enumeration<URL> resources = null; try { resources = loader.getResources(path); } catch (IOException e) { e.printStackTrace(); } List<File> fileList = new ArrayList<File>(); while (resources.hasMoreElements()) { URL resource = resources.nextElement(); fileList.add(new File(resource.getFile())); } ArrayList<Class> classList = new ArrayList<Class>(); for (File file : fileList) { classList.addAll(findClass(file, packageName)); } return classList; } @SuppressWarnings({ "rawtypes" }) private static List<Class> findClass(File file, String packageName) { List<Class> classList = new ArrayList<Class>(); if (!file.exists()) { return classList; } File[] fileArray = file.listFiles(); for (File subFile : fileArray) { if (subFile.isDirectory()) { assert !file.getName().contains("."); classList.addAll(findClass(subFile, packageName + "." + subFile.getName())); } else if (subFile.getName().endsWith(".class")) { try { classList.add(Class.forName(packageName + "." + subFile.getName().split(".class")[0])); } catch (ClassNotFoundException e) { e.printStackTrace(); } } } return classList; }}
0 0
- 根据父类获取同一个包(包括子包)下所有子类
- Java 扫描包下所有类(包括jar包)
- 通过反射机制获取位于同一个包下的接口的所有实现类
- 通过反射机制获取位于同一个包下的接口的所有实现类
- 获取一个包和子包下面所有的类
- java 获取某一个包下的所有class 包括jar包中的文件
- 获取包下的所有类
- 获取指定包下的所有类
- Java 获取包下的所有类
- Java获取package下所有的class对象,根据包名获取class字节码(普通文件包和Jar文件包)
- Java中继承时的问题——子类和父类在(或不在)同一个包中的继承
- shell中获取某个目录下全部的子文件名,java根据包名分批打包
- mysql 根据子分类获取所有父类
- java工具类-获取包下的所有类
- java工具类-获取包下的所有类
- java工具类 获取包下所有类
- java工具类 获取包下所有类
- java工具类 获取包下所有类
- 二、C#学习基础篇----基础语法
- mysql参数max_binlog_cache_size
- 单元测试出现org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)
- 白话阿里架构演变
- Dreamweaver CS6破解教程[序列号+破解补丁]
- 根据父类获取同一个包(包括子包)下所有子类
- LeetCode | 23. Merge k Sorted Lists
- 正则表达式语法简介
- linux查找目录下的所有文件中是否含有某个字符串
- Android模仿通讯录
- C++11特性:auto关键字与基于范围的for循环
- spring框架创建helloworld
- spring <context:property-placeholder/> 配置详解
- 用Xshell部署javaweb项目