import java.lang.reflect.Array;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
/**
* Java Reflection Cookbook
*
* @author Michael Lee
* @since 2006-8-23
* @version 0.1a
*/
public class Reflection {
/**
* 得到某个对象的公共属性
*
* @param owner, fieldName
* @return 该属性对象
* @throws Exception
*
*/
public Object getProperty(Object owner, String fieldName) throws Exception {
Class ownerClass = owner.getClass();
Field field = ownerClass.getField(fieldName);
Object property = field.get(owner);
return property;
}
/**
* 得到某类的静态公共属性
*
* @param className 类名
* @param fieldName 属性名
* @return 该属性对象
* @throws Exception
*/
public Object getStaticProperty(String className, String fieldName)
throws Exception {
Class ownerClass = Class.forName(className);
Field field = ownerClass.getField(fieldName);
Object property = field.get(ownerClass);
return property;
}
/**
* 执行某对象方法
*
* @param owner
* 对象
* @param methodName
* 方法名
* @param args
* 参数
* @return 方法返回值
* @throws Exception
*/
public Object invokeMethod(Object owner, String methodName, Object[] args)
throws Exception {
Class ownerClass = owner.getClass();
Class[] argsClass = new Class[args.length];
for (int i = 0, j = args.length; i < j; i++) {
argsClass[i] = args[i].getClass();
}
Method method = ownerClass.getMethod(methodName, argsClass);
return method.invoke(owner, args);
}
/**
* 执行某类的静态方法
*
* @param className
* 类名
* @param methodName
* 方法名
* @param args
* 参数数组
* @return 执行方法返回的结果
* @throws Exception
*/
public Object invokeStaticMethod(String className, String methodName,
Object[] args) throws Exception {
Class ownerClass = Class.forName(className);
Class[] argsClass = new Class[args.length];
for (int i = 0, j = args.length; i < j; i++) {
argsClass[i] = args[i].getClass();
}
Method method = ownerClass.getMethod(methodName, argsClass);
return method.invoke(null, args);
}
/**
* 新建实例
*
* @param className
* 类名
* @param args
* 构造函数的参数
* @return 新建的实例
* @throws Exception
*/
public Object newInstance(String className, Object[] args) throws Exception {
Class newoneClass = Class.forName(className);
Class[] argsClass = new Class[args.length];
for (int i = 0, j = args.length; i < j; i++) {
argsClass[i] = args[i].getClass();
}
Constructor cons = newoneClass.getConstructor(argsClass);
return cons.newInstance(args);
}
/**
* 是不是某个类的实例
* @param obj 实例
* @param cls 类
* @return 如果 obj 是此类的实例,则返回 true
*/
public boolean isInstance(Object obj, Class cls) {
return cls.isInstance(obj);
}
/**
* 得到数组中的某个元素
* @param array 数组
* @param index 索引
* @return 返回指定数组对象中索引组件的值
*/
public Object getByArray(Object array, int index) {
return Array.get(array,index);
}
}
分享到:
相关推荐
下面将详细介绍.NET反射的基础知识以及如何使用反射来实现常见的任务。 #### 三、反射的基本操作 根据题目提供的代码示例,我们可以了解到反射的一些基本操作: 1. **加载程序集**:使用`System.Reflection....
C#反射是.NET框架提供的一种强大机制,它允许在运行时检查和操作程序集、类型、接口、方法、属性等元数据。通过反射,开发者可以在程序执行过程中动态地获取类型信息,并实例化对象、调用方法或访问字段。这篇学习...
内含反射的定义,反射的价值,,反射使用的方法以及xml文件的定义,价值,特点详解
创建完实例后,还可以继续使用反射来调用该实例的方法。 ```csharp type.GetMethod("TestMethod3").Invoke(test, new object[] { "bbb" }); ``` 这里再次调用了`TestMethod3`方法,并将创建的实例`test`作为...
本文将深入探讨VR材质的反射基础,以及如何通过一系列步骤来设置和优化反射效果。 首先,我们要理解VR材质中的全局开关(Global switches)。"Default lights"选项控制是否使用场景中的默认灯光。关闭这个选项意味...
综上所述,5565系列反射内存卡的使用入门包括了对反射内存卡基础知识的理解、硬件和软件的安装、驱动程序的设置、LED指示灯状态的解读、自带测试程序的使用以及开发文档的下载与参考。掌握这些基础知识和技能,可以...
提供的压缩包文件中包含"反射的课堂笔记.wps",很可能是详细的反射学习笔记,包括基础概念和例子。而其他"exercises01"至"exercises07"可能是一系列的练习题目或代码示例,帮助加深对反射的理解和应用。 总的来说,...
- 实践操作:通过编写实际代码,体验反射的使用,例如动态调用方法、访问私有成员等。 - 阅读源码:研究知名框架如Spring中的反射使用,理解其应用场景和实现方式。 - 案例分析:分析和解决实际问题,比如如何...
总的来说,"JAVA反射机制的入门代码"是初学者理解Java反射机制的好教材,通过它,你可以学习如何动态地操作Java类,提高代码的灵活性,并掌握处理`properties`文件的基础方法。在深入学习和实践中,你将进一步理解...
反射基础”这一课程中,徐培成老师会深入讲解这个核心概念。 反射的基石是`java.lang.Class`类,它代表了Java运行时的类型信息。通过`Class`对象,我们可以获取类的构造器、方法、字段等信息,甚至可以在运行时动态...
如果变量是复杂类型(如指针、切片、映射、通道或数组),我们可以使用Elem()方法来获取基础类型的类型信息。对于结构体类型,可以使用NumField()和Field()方法来获取结构体的字段数量和字段的具体信息。Field()方法...
而这一切的基础都是对每层薄膜反射率的准确计算。 本文所述的研究和编程方法,为光学薄膜的设计和性能预测提供了强有力的工具。随着计算技术的发展和光学应用领域的拓展,对多层膜反射率的准确计算和分析将变得...
测量方法可能包括使用同步辐射光源(Synchrotron Radiation Source, SRS)或激光等X射线源发出的单色X射线照射到多层膜样品上,然后通过探测器测量反射光强度。通过改变入射角、波长、极化状态等参数,可以对多层膜...
具化是实现反射的基础,它使得程序能够动态地操纵类型信息和方法。 由于Java和.NET平台上反射技术的成功应用,反射技术从理论研究走向了实用阶段,动态获取和调整系统行为的能力得到了强化。动态反射技术尤其在需要...
在 Java 中,可以使用反射机制来获取对象的属性。例如,以下代码可以获取某个对象的属性: ```java public Object getProperty(Object owner, String fieldName) throws Exception { Class ownerClass = owner....
此外,反射操作比直接调用方法要慢,因为它涉及到了运行时的类查找和权限检查,因此在性能敏感的代码中应避免过度使用。 总结来说,Java反射机制是Java面向对象特性的重要补充,它允许程序在运行时动态地获取和修改...
反射还可以用于动态创建对象,使用 `newInstance()` 方法: ```java Object obj = c.newInstance(); ``` 这要求类有一个无参构造器,否则会抛出异常。 7. 访问和调用成员 反射允许访问类的字段(field)和...
### JAVA基础-反射-枚举知识点详解 #### 一、反射概述 反射是Java语言提供的一种能在运行时分析类和对象的能力。通过反射,我们可以在程序运行时动态地获取类的信息(如类名、方法、构造函数等)并操作这些信息。 ...
这个例子展示了如何使用反射创建一个类的实例,设置和获取属性值,以及调用方法。尽管反射功能强大,但也有一些注意事项: - **性能**:反射通常比直接的代码执行慢,因为它涉及到运行时查找和调用。在性能敏感的...
本篇文章将深入探讨如何使用Java反射来获取一个类的所有属性、方法,并处理List集合类。 首先,让我们了解Java反射的基础概念。在Java中,`java.lang.Class`类代表运行时的类信息。我们可以使用`Class.forName()`...