package com.cn;
import java.lang.reflect.Method;
public class Reflect {
/**
* 递归向上(父类)寻找方法
* @param clazz0 目标Class
* @param methodName 方法名称
* @param arg_classes 方法参数Class
* @return Method
* @throws Exception
*/
public static Method getMethod(Class clazz0, String methodName,
final Class[] arg_classes) throws Exception {
Method method = null;
try {
method = clazz0.getDeclaredMethod(methodName, arg_classes);
} catch (NoSuchMethodException e) {
try {
method = clazz0.getMethod(methodName, arg_classes);
} catch (NoSuchMethodException ex) {
if (clazz0.getSuperclass() == null) {
return method;
} else {
method = getMethod(clazz0.getSuperclass(), methodName,
arg_classes);
}
}
}
return method;
}
/**
* @param obj0 目标对象
* @param methodName 方法名
* @param args_classes 方法参数class类型
* @param arg_objects 方法实体参数
* @return
*/
public static Object invoke(final Object obj0, final String methodName,
final Class[] args_classes, final Object[] arg_objects) {
try {
Method method = getMethod(obj0.getClass(), methodName, args_classes);
method.setAccessible(true); // 强制将方法设置成可访问状态(调用private方法)
return method.invoke(obj0, arg_objects);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public static Object invoke(final Object obj, final String methodName,
final Class[] classes) {
return invoke(obj, methodName, classes, new Object[] {});
}
public static Object invoke(final Object obj, final String methodName) {
return invoke(obj, methodName, new Class[] {}, new Object[] {});
}
}
相关推荐
这个“Filling Data objects using Reflection”程序源码是关于如何利用反射来动态地填充数据对象的一个示例。下面我们将深入探讨反射的基本概念以及在数据对象装载中的应用。 首先,我们需要理解什么是数据对象。...
1. **Class类**:每个Java类在运行时都有一个与之对应的Class对象,可以通过`Class.forName()`或对象的`getClass()`方法获取。Class对象提供了获取类信息的方法,如类名、包名、父类、接口、枚举常量等。 2. **...
2. **Method对象**:代表类中的一个方法。通过Class对象的`getMethods()`或`getDeclaredMethods()`方法可以获取类的方法信息,包括方法名、返回类型、参数类型等。 3. **Field对象**:表示类的字段。类似地,可以...
在提供的"Test"压缩包文件中,可能包含了一个简单的反射应用示例,例如创建一个类,然后通过反射调用其方法或访问其字段。学习这个小例子可以帮助初学者更好地理解反射的实际运用。然而,反射虽然强大,但应谨慎使用...
在.NET框架中,Reflection是一个强大的工具,它允许程序员在运行时检查和操作程序集、类型、方法、属性等对象。Reflection.zip文件中的ConsoleApp1示例可能是用来演示如何使用反射来实现动态代码执行和元数据探索。...
在Laravel框架中,Reflection是一个重要的概念,它主要涉及到PHP的反射API(Reflection API)。反射是一种在运行时分析类、接口、方法等元数据的技术,它允许程序在执行过程中检查自身的行为和结构。在Laravel中,...
`invoke()`方法会处理所有通过代理对象发出的方法调用。 3. 反射的应用:可能包括动态获取类信息,实例化对象,调用私有方法,访问私有字段等。 4. 代理的使用场景示例:比如AOP(面向切面编程)中的日志记录、权限...
这允许通过对象调用函数,从而实现类似函数指针的效果。 3. **ActiveX DLL或COM组件**: VB6及更早版本可以通过创建ActiveX DLL或COM组件来使用函数指针。在DLL或COM组件中定义一个函数指针类型,然后在VB中通过创建...
如果一个类实现了`Cloneable`接口并重写了`clone()`方法,那么可以通过`clone()`创建对象的副本。例如: ```java class CloneExample implements Cloneable { // ... @Override protected Object clone() ...
Java反射机制是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。这个特性使得Java具有了高度的灵活性和动态性,尤其是在处理对象、类、接口以及它们之间的关系...
例如,`Activator.CreateInstance(typeof(MyClass))`会创建一个`MyClass`的新实例。 三、探索类和成员 1. 获取类信息:`Type.GetProperties()`, `Type.GetMethods()`, `Type.GetConstructors()`等方法用于获取类的...
- 客户端代码,通过代理对象调用原始对象的方法。 代理模式的优点在于: - **解耦**:客户端只与代理对象交互,不必了解原始对象的具体实现细节。 - **扩展性**:可以通过代理对象添加新的功能,而不会影响原始对象...
Java反射是Java编程语言中的一个强大特性,它允许运行时检查类、接口、字段和方法的信息,甚至在不预先知道具体类型的情况下动态调用方法和访问字段。在"High performance Java reflection.zip"这个压缩包中,我们...
在WCF中,可以使用`Castle.DynamicProxy`库或者.NET Framework的`System.Reflection.Emit`命名空间来创建动态代理,从而在调用WCF服务时添加日志、事务控制等特性,而无需修改服务契约接口。 **WCF动态调用** 是指...
创建一个`Class`对象通常是通过类名或者对象的`getClass()`方法。一旦有了`Class`对象,我们就可以使用`newInstance()`创建该类的实例,或者通过`getMethod()`、`getConstructor()`和`getField()`来获取方法、构造器...
对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制。 在Java中,反射的核心类主要有三个:Class类、Constructor类和Method类。Class类...
在MVC框架中,权限控制是一个非常重要的功能,它确保了用户只能访问他们被授权的功能模块。本文将详细介绍如何利用反射技术来获取MVC应用中的所有Action方法,并以此为基础实现权限控制。 #### 一、反射的基本概念 ...
最后,通过`Proxy.newProxyInstance()`方法,我们可以生成一个实现了`UserService`接口的代理对象,这个代理对象在调用方法时会委托给`MyInvocationHandler`。 总结一下,`JAVA代理`涉及到的主要知识点包括: 1. **...
总的来说,这个项目提供了一个Java实现软键盘并利用Hook技术的实例,对于理解Java中的Hook机制、图形用户界面开发以及跨平台库的使用具有一定的学习价值。通过深入研究这个项目,开发者可以提升对Java高级特性的理解...