Java Reflection API 运用示例
图5示范图4提过的每一个Reflection API,及其执行结果。程序中出现的tName()是个辅助函数,可将其第一自变量所代表的“Java class完整路径字符串”剥除路径部分,留下class名称,储存到第二自变量所代表的一个hashtable去并返回(如果第二自变量为null,就不储存而只是返回)。
#001 Class c = null;
#002 c = Class.forName(args[0]);
#003
#004 Package p;
#005 p = c.getPackage();
#006
#007 if (p != null)
#008 System.out.println("package "+p.getName()+";");
执行结果(例):
package java.util;
图5-1:找出class 隶属的package。其中的c将继续沿用于以下各程序片段。
#001 ff = c.getDeclaredFields();
#002 for (int i = 0; i < ff.length; i++)
#003 x = tName(ff[i].getType().getName(), classRef);
#004
#005 cn = c.getDeclaredConstructors();
#006 for (int i = 0; i < cn.length; i++) {
#007 Class cx[] = cn[i].getParameterTypes();
#008 for (int j = 0; j < cx.length; j++)
#009 x = tName(cx[j].getName(), classRef);
#010 }
#011
#012 mm = c.getDeclaredMethods();
#013 for (int i = 0; i < mm.length; i++) {
#014 x = tName(mm[i].getReturnType().getName(), classRef);
#015 Class cx[] = mm[i].getParameterTypes();
#016 for (int j = 0; j < cx.length; j++)
#017 x = tName(cx[j].getName(), classRef);
#018 }
#019 classRef.remove(c.getName()); //不必记录自己(不需import 自己)
执行结果(例):
import java.util.ListIterator;
import java.lang.Object;
import java.util.LinkedList$Entry;
import java.util.Collection;
import java.io.ObjectOutputStream;
import java.io.ObjectInputStream;
图5-2:找出导入的classes,动作细节详见内文说明。
#001 int mod = c.getModifiers();
#002 System.out.print(Modifier.toString(mod)); //整个modifier
#003
#004 if (Modifier.isInterface(mod))
#005 System.out.print(" "); //关键词 "interface" 已含于modifier
#006 else
#007 System.out.print(" class "); //关键词 "class"
#008 System.out.print(tName(c.getName(), null)); //class 名称
执行结果(例):
public class LinkedList
图5-3:找出class或interface 的名称,及其属性(modifiers)。
#001 TypeVariable<Class>[] tv;
#002 tv = c.getTypeParameters(); //warning: unchecked conversion
#003 for (int i = 0; i < tv.length; i++) {
#004 x = tName(tv[i].getName(), null); //例如 E,K,V...
#005 if (i == 0) //第一个
#006 System.out.print("<" + x);
#007 else //非第一个
#008 System.out.print("," + x);
#009 if (i == tv.length-1) //最后一个
#010 System.out.println(">");
#011 }
执行结果(例):
public abstract interface Map<K,V>
或 public class LinkedList<E>
图5-4:找出parameterized types 的名称
#001 Class supClass;
#002 supClass = c.getSuperclass();
#003 if (supClass != null) //如果有super class
#004 System.out.print(" extends" +
#005 tName(supClass.getName(),classRef));
执行结果(例):
public class LinkedList<E>
extends AbstractSequentialList,
图5-5:找出base class。执行结果多出一个不该有的逗号于尾端。此非本处重点,为简化计,不多做处理。
#001 Class cc[];
#002 Class ctmp;
#003 //找出所有被实现的interfaces
#004 cc = c.getInterfaces();
#005 if (cc.length != 0)
#006 System.out.print(", \r\n" + " implements "); //关键词
#007 for (Class cite : cc) //JDK1.5 新式循环写法
#008 System.out.print(tName(cite.getName(), null)+", ");
执行结果(例):
相关推荐
《Java Reflection in Action》这本书深入探讨了这一主题,为开发者提供了理解和运用反射的强大工具。这本书包含了PDF版的全文以及示例源代码,帮助读者通过实践来学习。 1. **反射基础**: - 反射API:`java.lang...
反射在Java中主要通过`java.lang.reflect`包来实现,它提供了一系列API用于获取类、构造器、方法和字段的信息,并能在运行时创建和操作对象。这种能力使得Java程序具有了自我认知的能力,能够动态地加载类、调用方法...
《Java Reflection In Action》这本书会详细解释这些概念,并提供实践示例,帮助开发者更好地理解和利用Java反射的强大功能。阅读本书,你将能够更深入地理解Java的动态特性和潜在应用,提升你的编程技能。
Java JDK API文档是Java开发人员不可或缺的参考资料,它包含了Java平台标准版(Java SE)的所有公共类、接口和方法的详细说明。这份文档是Oracle公司为开发者提供的官方指南,帮助他们理解和使用Java语言及库。在...
Java API(Application Programming Interface)是Java编程语言的核心组成部分,...同时,官方文档中的示例代码也是理解和应用这些API的重要资源。在实际开发中,遇到问题时,查阅Java API文档通常能快速找到解决方案。
### Java反射技术详解——《Java Reflection in Action》 #### 一、引言 在现代软件开发领域,Java作为一门广泛使用的编程语言,其强大的特性和灵活性使得开发者能够构建出复杂而高效的应用程序。其中,Java反射...
这个"javaAPI 中文网页版2"文档对每个类和接口都做了详尽的解释,包括其方法、构造函数、异常、示例代码等,使得开发者可以快速定位所需信息,提升开发效率。无论你是Java初学者还是经验丰富的开发者,这个文档都将...
5. **反射(Reflection)**: `java.lang.reflect`包提供了运行时访问和修改类、方法和字段的能力。 6. **异常处理(Exception Handling)**: `java.lang.Throwable`及其子类如Exception和Error,构成了Java的异常...
Java反射(Reflection)和注解(Annotation)是Java编程语言中的两个重要特性,它们在实际开发中有着广泛的应用。在“浙大软件学院培训课件java reflection annotation”中,我们将会探讨这两个主题,特别是如何利用它们...
在Java编程语言中,反射API(Reflection API)是一种强大的工具,允许程序在运行时检查和操作其他类的信息,包括类的结构、字段、方法以及构造器。反射API使得程序员可以在未知类名或方法名的情况下,动态地创建对象...
本项目“java-android-orm-db-example”是针对Android平台的一个自定义ORM实现,它巧妙地结合了设计模式和Java Reflection API,为开发者提供了更便捷的数据持久化方案。 首先,让我们深入了解一下ORM的基本概念。...
8. **反射(Reflection)**:`java.lang.reflect`包提供的API允许在运行时动态地获取类的信息并操作其对象,是进行元编程和动态代理的重要工具。 9. **泛型(Generics)**:从Java 5开始引入的泛型提高了类型安全,...
在压缩包中,"Java_Reflection_Programming.pdf"可能是一份详细的教程,涵盖了上述所有内容,并可能包括了如何使用反射API进行反射编程的实例,以及如何在RMI和代理模式中应用反射的示例。"www.pudn.com.txt"可能是...
Java API,全称为Java应用程序接口,是Java编程语言的核心...这个1.75M的英文文档将提供详细的解释和示例,帮助开发者深入理解并有效利用Java API进行编程。对于学习和开发J2EE应用来说,这是一份非常宝贵的参考资料。
Java API文档是Java开发者的重要参考资料,它包含了Java平台标准版(Java Platform Standard Edition,简称Java SE)的核心类库,提供了一系列预定义的类和接口,这些类和接口构成了Java编程的基础框架。本压缩包...
在“自动化js WebAPI开发包-jzsky.docx”文档中,可能包含有关如何使用Nashorn引擎进行Web API开发的详细步骤、示例代码或最佳实践。通过阅读这份文档,开发者可以学习如何利用Nashorn构建和测试JavaScript驱动的Web...
这个中文版的Java API文档涵盖了所有这些知识点,并提供了详细的说明和示例,是开发者学习和查询Java技术的重要资源。使用虚拟光驱或7zip、WinRAR等工具解压后,开发者可以直接查阅文档,加深对Java编程的理解和应用...
在Java中,反射API提供了对类、接口、字段和方法等元数据的访问,使得我们可以“看穿”类的封装性,实现一些在编译时无法预知的功能。下面将详细探讨Java反射的相关知识点。 首先,`java.lang.Class`类是Java反射的...
在"Reflection.zip"压缩包中,包含的"Reflection"文件很可能是一个示例或者教程,详细讲解了如何使用Java反射API进行各种操作。现在,我们将深入探讨Java反射机制及其主要应用。 1. **什么是Java反射**: Java反射...
- Java反射API提供`java.lang.reflect.Proxy`类,用于创建动态代理类,实现接口的方法调用可以在运行时动态处理。 12. **Java 8的反射特性** - Java 8引入了一些新特性,例如lambda表达式和默认方法,这些都可以...