`
kingbinchow
  • 浏览: 124506 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

反射机制——查找类接口

    博客分类:
  • java
阅读更多
/**
 * 
 * @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对象

    在Java中,反射机制的核心类是`java.lang.Class`,它代表了运行时的类信息。通过Class对象,我们可以获取到类的结构信息,如类名、方法、字段等,并能在运行时动态地创建对象、调用方法。 字符串在Java中扮演着重要...

    博客《 夯实JAVA基本之二 —— 反射(3):类内部信息获取》对应源码

    这篇博客《夯实JAVA基本之二 —— 反射(3):类内部信息获取》深入探讨了如何通过反射机制获取Java类的内部信息。在Android开发中,反射的应用尤为广泛,例如动态加载类、处理注解、适配不同设备等场景。 首先,要...

    Java第4章面对对象—— 反射学习 程序 .zip

    7. **接口与注解**:反射也能用来检查类是否实现了特定接口,或者查找类及其成员上的注解,这对于实现元数据驱动的设计非常有用。 8. **Java代理(Proxy)**:Java反射还包括了代理机制,可以动态创建实现一组接口...

    java基础——————试题库

    15. **反射机制** - Class类:代表运行时的类信息,可以动态加载类、创建对象、获取方法和字段。 - 构造器、方法、字段的invoke()方法:在运行时调用对象的方法或构造器。 16. **泛型** - 泛型引入了类型参数,...

    JVM学习笔记(一)——类的加载机制

    这使得类和接口之间的关联可以被有效地查找和使用。 - **初始化**:最后,类的初始化阶段会执行类的初始化方法 `&lt;clinit&gt;`,这通常包括静态变量的显式赋值和静态块的执行。 2. **类加载器** 类加载器是实现类...

    黑马程序员入学Java知识——精华总结

    9. **反射**:Java的反射机制允许程序在运行时动态访问类、接口、字段和方法的信息,这在插件系统、序列化和动态代理等场景中非常有用。 10. **Java虚拟机(JVM)**:理解JVM的工作原理,包括类加载、内存管理和...

    SUN认证——SCJP考试题库(310-055)

    8. **反射机制**:利用Class类动态获取类信息,创建对象,调用方法,以及理解反射在实际开发中的应用。 9. **Java内存模型**:理解Java的垃圾收集机制,以及堆内存和栈内存的区别。 10. **Java标准库API**:熟悉...

    Java反射值Method

    本文将深入探讨Java反射中的一个关键组件——`Method`,以及如何利用`Class`类的多种方法来获取和操作类的方法。 ### 一、`Method`与`Class`的关系 在Java反射中,`Method`类提供了访问类或接口声明的公共成员方法...

    Java典型模块

    21.3.1 设计项目的界面——查找和替换输入界面 21.3.2 各种按钮的事件处理 21.4 小结 第5篇 Applet程序开发 第22章 图像轮显动画项目(显示图像+多线程) 22.1 图像轮显动画原理 22.1.1 项目结构框架分析 22.1.2 ...

    xie——Java

    Java作为一种多用途、面向对象的编程语言,拥有丰富的类库和API,包括集合框架、输入/输出流、网络编程、多线程、异常处理、反射机制等多个方面。这份资料很可能详细列出了这些核心概念,并对每个API的使用方法、...

    JDK1.6——API文档完整版

    这些集合类提供了丰富的数据存储和操作功能,例如添加、删除、查找元素,以及对集合进行排序和遍历等。 **IO流** 在`java.io`包中,有多种类型的流,如字节流、字符流、输入流、输出流等,它们用于读写文件、网络...

    word文件和程序源代码

    Java反射机制是Java动态性的一个体现,它允许程序在运行时检查类、接口、字段和方法的信息,甚至可以在运行时创建和调用对象。这对于理解和操作未知类型的对象,或者在编写元编程和插件系统时非常有用。以下是对Java...

    北大Java讲义——绝对经典

    8. **反射机制** - **Class类**:代表运行时的类信息,通过它可以在运行时获取类的详细信息并操作对象。 - **构造器与方法的反射调用**:动态创建对象和调用方法。 9. **泛型** - **类型参数**:在类、接口和...

    java面试——杭州-阿里云-Java中级.zip

    3. **多线程**:掌握线程的创建方式(Thread类、Runnable接口)、线程同步机制(synchronized关键字、wait/notify、Lock接口及其实现类)、并发工具类(如CountDownLatch、CyclicBarrier、Semaphore)以及线程池...

    高级JAVA面试——最全的总结

    - 反射:了解反射机制,如何动态调用类、方法和字段。 2. **JAVA集合框架** - List、Set、Queue接口及其实现类:ArrayList、LinkedList、HashSet、LinkedHashSet、TreeSet、ArrayDeque等。 - Map接口及实现类:...

    Java后端学习路线梳理(csdn)————程序.pdf

    Java的基础包括语言语法、面向对象编程、接口、容器、异常处理、泛型、反射和注解。深入理解JVM(Java虚拟机)也至关重要,涉及类加载机制、字节码执行、内存模型、垃圾回收和性能优化。 在并发和多线程方面,你...

    java面试——深圳-银盛支付-Java中级.zip

    6. **反射**:学习如何在运行时动态获取类的信息,创建对象,调用方法,以及修改私有成员变量。 7. **JVM内存模型**:理解堆、栈、方法区、本地方法栈、程序计数器等区域的作用,以及垃圾回收机制(GC)的基本原理...

Global site tag (gtag.js) - Google Analytics