/**
*
* @author king
*
* 查找类接口
*/
public class ClassUtils {
public static List<Class> getAllClassByInterface(Class c) {//按照接口字母顺序查找
List<Class> returnClassList = new ArrayList<Class>();
if (c.isInterface()) {
String packageName = c.getPackage().getName();
try {
try {
List<Class> allClass = getClasses(packageName);
for (int i = 0, len = allClass.size(); i < len; i++) {
if (c.isAssignableFrom(allClass.get(i))) {
if (!c.equals(allClass.get(i))) {
returnClassList.add(allClass.get(i));
}
}
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return returnClassList;
}
private static List<Class> getClasses(String packageName)
throws IOException, ClassNotFoundException {
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 = new ArrayList<Class>();
if (!directory.exists()) {
return classes;
}
File[] files = directory.listFiles();
for (File file : files) {
if (file.isDirectory()) {
assert !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;
}
}
分享到:
相关推荐
在Java中,反射机制的核心类是`java.lang.Class`,它代表了运行时的类信息。通过Class对象,我们可以获取到类的结构信息,如类名、方法、字段等,并能在运行时动态地创建对象、调用方法。 字符串在Java中扮演着重要...
这篇博客《夯实JAVA基本之二 —— 反射(3):类内部信息获取》深入探讨了如何通过反射机制获取Java类的内部信息。在Android开发中,反射的应用尤为广泛,例如动态加载类、处理注解、适配不同设备等场景。 首先,要...
7. **接口与注解**:反射也能用来检查类是否实现了特定接口,或者查找类及其成员上的注解,这对于实现元数据驱动的设计非常有用。 8. **Java代理(Proxy)**:Java反射还包括了代理机制,可以动态创建实现一组接口...
15. **反射机制** - Class类:代表运行时的类信息,可以动态加载类、创建对象、获取方法和字段。 - 构造器、方法、字段的invoke()方法:在运行时调用对象的方法或构造器。 16. **泛型** - 泛型引入了类型参数,...
这使得类和接口之间的关联可以被有效地查找和使用。 - **初始化**:最后,类的初始化阶段会执行类的初始化方法 `<clinit>`,这通常包括静态变量的显式赋值和静态块的执行。 2. **类加载器** 类加载器是实现类...
9. **反射**:Java的反射机制允许程序在运行时动态访问类、接口、字段和方法的信息,这在插件系统、序列化和动态代理等场景中非常有用。 10. **Java虚拟机(JVM)**:理解JVM的工作原理,包括类加载、内存管理和...
8. **反射机制**:利用Class类动态获取类信息,创建对象,调用方法,以及理解反射在实际开发中的应用。 9. **Java内存模型**:理解Java的垃圾收集机制,以及堆内存和栈内存的区别。 10. **Java标准库API**:熟悉...
本文将深入探讨Java反射中的一个关键组件——`Method`,以及如何利用`Class`类的多种方法来获取和操作类的方法。 ### 一、`Method`与`Class`的关系 在Java反射中,`Method`类提供了访问类或接口声明的公共成员方法...
21.3.1 设计项目的界面——查找和替换输入界面 21.3.2 各种按钮的事件处理 21.4 小结 第5篇 Applet程序开发 第22章 图像轮显动画项目(显示图像+多线程) 22.1 图像轮显动画原理 22.1.1 项目结构框架分析 22.1.2 ...
Java作为一种多用途、面向对象的编程语言,拥有丰富的类库和API,包括集合框架、输入/输出流、网络编程、多线程、异常处理、反射机制等多个方面。这份资料很可能详细列出了这些核心概念,并对每个API的使用方法、...
这些集合类提供了丰富的数据存储和操作功能,例如添加、删除、查找元素,以及对集合进行排序和遍历等。 **IO流** 在`java.io`包中,有多种类型的流,如字节流、字符流、输入流、输出流等,它们用于读写文件、网络...
Java反射机制是Java动态性的一个体现,它允许程序在运行时检查类、接口、字段和方法的信息,甚至可以在运行时创建和调用对象。这对于理解和操作未知类型的对象,或者在编写元编程和插件系统时非常有用。以下是对Java...
8. **反射机制** - **Class类**:代表运行时的类信息,通过它可以在运行时获取类的详细信息并操作对象。 - **构造器与方法的反射调用**:动态创建对象和调用方法。 9. **泛型** - **类型参数**:在类、接口和...
3. **多线程**:掌握线程的创建方式(Thread类、Runnable接口)、线程同步机制(synchronized关键字、wait/notify、Lock接口及其实现类)、并发工具类(如CountDownLatch、CyclicBarrier、Semaphore)以及线程池...
- 反射:了解反射机制,如何动态调用类、方法和字段。 2. **JAVA集合框架** - List、Set、Queue接口及其实现类:ArrayList、LinkedList、HashSet、LinkedHashSet、TreeSet、ArrayDeque等。 - Map接口及实现类:...
Java的基础包括语言语法、面向对象编程、接口、容器、异常处理、泛型、反射和注解。深入理解JVM(Java虚拟机)也至关重要,涉及类加载机制、字节码执行、内存模型、垃圾回收和性能优化。 在并发和多线程方面,你...
6. **反射**:学习如何在运行时动态获取类的信息,创建对象,调用方法,以及修改私有成员变量。 7. **JVM内存模型**:理解堆、栈、方法区、本地方法栈、程序计数器等区域的作用,以及垃圾回收机制(GC)的基本原理...