package keifer.www;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
@SuppressWarnings("rawtypes")
public class ClassUtils {
@SuppressWarnings("unchecked")
public static List<Class> getAllClassByInterface(Class c) {// 返回这个接口的所有实现类
List<Class> returnClassList = null;
if (c.isInterface()) {
returnClassList = new ArrayList<Class>(0); // 返回结果
String packageName = c.getPackage().getName(); // 获得当前的包名
try {
List<Class> allClass = getClasses(packageName); // 获得当前包下以及子包下的所有类
for (int i = 0; i < allClass.size(); i++) {
if (c.isAssignableFrom(allClass.get(i))) { // 判断是否是同一个接口
if (!c.equals(allClass.get(i))) { // 本身不加进去
returnClassList.add(allClass.get(i));
}
}
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
} else {// 如果不是一个接口,则不做处理
return new ArrayList<Class>(0);
}
return returnClassList;
}
// 从一个包中查找出所有的类,在jar包中不能查找
private static List<Class> getClasses(String packageName) throws ClassNotFoundException, IOException {
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
String path = packageName.replace('.', '/');
Enumeration<URL> resources = classLoader.getResources(path);
List<File> dirs = new ArrayList<File>();
while (resources.hasMoreElements()) {
URL resource = resources.nextElement();
dirs.add(new File(resource.getFile()));
}
ArrayList<Class> classes = new ArrayList<Class>();
for (File directory : dirs) {
classes.addAll(findClasses(directory, packageName));
}
return classes;
}
// 在一个目录及其所有子目录下面查找出所有的类
private static List<Class> findClasses(File directory, String packageName) throws ClassNotFoundException {
List<Class> classes = null;
if (!directory.exists()) {
return new ArrayList<Class>(0);
}
classes = new ArrayList<Class>();
File[] files = directory.listFiles();
for (File file : files) {
if (file.isDirectory()) {
if(!file.getName().contains(".")){
classes.addAll(findClasses(file,packageName + "." + file.getName()));
}
} else if (file.getName().endsWith(".class")) {
classes.add(Class.forName(packageName+ '.'+ file.getName().substring(0,file.getName().length() - 6)));
}
}
return classes;
}
}
分享到:
相关推荐
Base64工具类-字符编码工具类-数据类型转换-日期工具类-Escape中文转码工具类-fastjson工具类-文件工具类-Http工具类-http请求工具类-用于模拟HTTP请求中GET/POST方式 -图片处理工具类-Ip工具类-mail工具类-Map工具...
java项目开发常用工具类:RestTemplate、redis、exceptionHandler、Validation、logback。。。
SwiftTools 一些项目中的常用Swift开发工具类
java开发,30个常用工具类总结,全部来自项目实践中用到的工具类:dateUtils、StringUtils、CalendarUtils、FileUtil、RandomUtil等
java 工具类 项目开发常用方法,如:字符转换函数,字符处理,数组相关的处理函数
项目中各种常用的JAVA工具类 比如FileUtils DateUtils 等等,封装得很完美
存放项目中常用的工具类,比如:字符串处理、日期处理、文件上传下载压缩、获取拼音、MD5码、路径处理、导出到Excel、UUID、排序算法、水印等常用工具
Java项目常用开发工具类
Android开发中常用的工具类 eclipse环境编译的 可以直接导入项目中去查看
1、Utils工具类有String工具类、XmlNode节点工具类、BeanFactory相关、Common工具类、Cookie工具类、Date工具类、Http工具类、JDBC工具类、日志Log工具类、Servlet相关等。2、工具类省了重复造轮子的工作,可以直接...
本项目包含我们在开发过程中所要用到的10个工具类,需要的同学可以借鉴一下
iOS轻量级高效率工具库,都是项目中常用的工具分类.zip,iOS轻量级高效率工具库,都是项目中常用的工具分类
收集的项目中常用的分类、工具类、常量、pch文件,很全
里面包含一个大型项目的通用工具类包含文件上传 支付宝微信支付 微信登录等 里面包含一个大型项目的通用工具类包含文件上传 支付宝微信支付 微信登录等 里面包含一个大型项目的通用工具类包含文件上传 支付宝微信...
这是我自己整理出来的一些在项目中常用的开发工具类,一些常用的控件都封装好了的,可以直接使用。
springboot 实战项目中如何集成 Redis ,并且封装了超详细易用的 Redis 操作工具类。
自己总结的 封装了一些资源,网络请求是按照rxjava来封装的,不是很全面.其他的常用工具类及一些基础的视图组件封装。要使用,直接引用其工程就可以。是AS项目libary.
工作5年精心整理_Java常用工具类源码 收集了java项目开中常用的工具操作类,方法非常全,可应用在大部份java 项目中。 提供了很丰富的java工具类,包括字符串、数字、日期、文件、图像、编码解码、校验工具、文档...
项目搭建时常用工具类的集合,比如线程池、Handler通信、消息提示、日志打印等等
提供了项目中很多的工具类。使用时需要重新更改一下自己项目的包名。直接调用即可