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;
}
}
分享到:
相关推荐
因此,开发者应当不断审视和提炼项目中的重复逻辑,将其抽象到工具类中。 9. **性能优化**:对于效率敏感的工具方法,开发者需要注意性能优化,例如避免不必要的内存分配,减少循环次数,利用缓存等。 10. **单元...
Base64工具类-字符编码工具类-数据类型转换-日期工具类-Escape中文转码工具类-fastjson工具类-文件工具类-Http工具类-http请求工具类-用于模拟HTTP请求中GET/POST方式 -图片处理工具类-Ip工具类-mail工具类-Map工具...
本文将深入探讨标题"**C++工具类-常用工具类源码**"所涵盖的知识点,主要围绕文件处理、编码处理、字符串处理、网络爬虫以及网页数据抓取等主题。 首先,让我们来看看文件处理方面。`FileUtil`类通常包含对文件的...
标题中的"C#工具类库类库 包含所有的常用工具类"暗示了这是一个集合,包含了多种实用工具类,能够极大地提升开发效率。这些工具类涵盖了从文件操作到网络通信的多个领域。 首先,FTP操作类是用于与FTP服务器进行...
以下是对标题和描述中提到的几个常用工具类的详细说明: 1. **DateUtils**: `java.util.Date` 和 `java.time` 包含日期和时间的操作,但DateUtils通常是Apache Commons Lang库中的一个工具类,提供更方便的日期处理...
在Java编程中,工具类(Utility Classes)是非常重要的组成部分,它们提供了许多通用的功能,以简化开发人员的工作。以下是对"一些java常用的工具类"的详细说明。 首先,工具类通常包含静态方法,这些方法不依赖于...
在Android应用开发中,工具类(Utils Class)是开发者经常使用的辅助代码集合,它们封装了各种通用功能,以便在项目中随时调用。本压缩包提供了10个常用的工具类,可以帮助开发者提高效率,减少重复代码。以下是这些...
在Java编程语言中,"工具类"通常指的是包含各种实用方法的类,这些方法可以用于执行常见的编程任务,而无需创建实例。...在实际项目中,根据需求选择合适的工具类和库,可以显著提高代码的可维护性和可靠性。
在Java项目开发中,工具类扮演着至关重要的角色,它们为开发者提供了便利的功能,提高了代码的可重用性和效率。以下是一些常见的Java项目开发工具类的详细说明: 1. **RestTemplate**: RestTemplate是Spring框架...
1、Utils工具类有String工具类、XmlNode节点工具类、BeanFactory相关、Common工具类、Cookie工具类、Date工具类、Http工具类、JDBC工具类、日志Log工具类、Servlet相关等。2、工具类省了重复造轮子的工作,可以直接...
Java常用工具类是Java开发中不可或缺的一部分,它们提供了一系列便捷的方法,帮助开发者高效地处理各种常见任务。在Java中,最著名的工具类库是`java.util`包,它包含了大量实用类,如集合、日期时间、数学计算、...
"开发常用工具类"这个主题涵盖了各种不同领域的实用功能,例如字符串处理、日期时间操作、集合操作等。下面将详细介绍这些工具类中的常见知识点: 1. **字符串工具类**: - `StringUtils`:Apache Commons Lang ...
本篇文章将详细探讨Android开发中的几个常用工具类,包括LOG、Toast、SharedPreferences以及其他的实用工具类。 1. **LOG工具类**: 在Android开发中,日志(LOG)主要用于调试和追踪应用运行时的状态。自定义的...
首先,"常用工具类"是指在开发过程中频繁使用的、通用的类库,它们提供了许多常见的功能,如文本处理、数据处理等,以简化编码工作。在C#.NET中,这样的工具类往往以静态类的形式存在,例如`System.IO`中的`File`和`...
【标题】"安卓开发框架工具类相关-Android快速开发系列10个常用工具类.rar" 涉及的是Android应用程序开发中的一个关键方面——工具类的集合。在Android开发中,工具类通常包含一系列静态方法,用于执行常见的、重复...
java 工具类 项目开发常用方法,如:字符转换函数,字符处理,数组相关的处理函数
以下是对"常用工具类"这个主题的详细阐述。 首先,让我们了解一下`UtilsDemo`这个文件。在Android项目中,它可能是一个包含各种实用函数的Java类,这些函数可能涉及到字符串处理、日期时间操作、网络请求、文件操作...
本文将详细解析“java开发常用工具类大全”中涉及的关键知识点,包括但不限于输入字符校验、数据转换、网络操作、加密解密、JSON处理、图像操作以及数据库操作。 1. **输入字符校验类**: 这类工具通常包含对字符...
在Java编程语言中,工具类集合...在实际项目中,开发者往往需要根据具体需求选择合适的工具类进行组合使用,以实现特定功能。通过深入理解并熟练运用这些工具类,可以有效地优化代码,减少错误,并提高程序的可维护性。
"常用工具类jar包"是一个集合了各种实用工具方法的库,主要包含了字符串处理、JSON转换处理、订单实体类以及商品库客户端调用的封装。下面将对这些知识点进行详细解释: 1. **字符串处理封装**: 字符串处理是编程...