以下内容转自:http://blog.csdn.net/sunyujia/article/details/2501709
package com.syj.util.reflect;
import java.lang.reflect.Method;
/**
* <p>
* Title: 私有方法调用工具类
* </p>
*
* <p>
* Description:利用java反射调用类的的私有方法
* </p>
*
* <p>
* Copyright: Copyright (c) 2007
* </p>
*
* @author 孙钰佳
* @main sunyujia@yahoo.cn
* @date Jun 1, 2008 10:18:58 PM
*/
public class PrivateUtil {
/**
* 利用递归找一个类的指定方法,如果找不到,去父亲里面找直到最上层Object对象为止。
*
* @param clazz
* 目标类
* @param methodName
* 方法名
* @param classes
* 方法参数类型数组
* @return 方法对象
* @throws Exception
*/
public static Method getMethod(Class clazz, String methodName,
final Class[] classes) throws Exception {
Method method = null;
try {
method = clazz.getDeclaredMethod(methodName, classes);
} catch (NoSuchMethodException e) {
try {
method = clazz.getMethod(methodName, classes);
} catch (NoSuchMethodException ex) {
if (clazz.getSuperclass() == null) {
return method;
} else {
method = getMethod(clazz.getSuperclass(), methodName,
classes);
}
}
}
return method;
}
/**
*
* @param obj
* 调整方法的对象
* @param methodName
* 方法名
* @param classes
* 参数类型数组
* @param objects
* 参数数组
* @return 方法的返回值
*/
public static Object invoke(final Object obj, final String methodName,
final Class[] classes, final Object[] objects) {
try {
Method method = getMethod(obj.getClass(), methodName, classes);
method.setAccessible(true);// 调用private方法的关键一句话
return method.invoke(obj, 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[] {});
}
/**
* 测试反射调用
*
* @param args
*/
public static void main(String[] args) {
PrivateUtil.invoke(new B(), "printlnA", new Class[] { String.class },
new Object[] { "test" });
PrivateUtil.invoke(new B(), "printlnB");
}
}
class A {
private void printlnA(String s) {
System.out.println(s);
}
}
class B extends A {
private void printlnB() {
System.out.println("b");
}
}
程序的输出结果为
test
b
说明private方法调用成功了不管是自己的私有方法还是父类的私有方法。
分享到:
相关推荐
java 反射 调用私有方法(有参数私有方法)获取私有属性值
Java反射 调用空参方法 调用Object类型参数的方法 调用基本类型参数的方法 调用基本类型数组参数的方法 调用String数组参数的方法 调用Object数组参数的方法 调用私有方法
Java 反射详解(包含私有方法属性的调用)
Method,invoke,getMethod等反射私有方法和私有属性
该资源包含了一个利用反射执行的一些操作,包含了动态执行构造方法,动态运行私有方法,为属性初始化等等,简单易懂。
调用空参方法 调用Object类型参数的方法 调用基本类型参数的方法 调用数组参数的方法 调用私有方法
Java反射机制,万物皆对象,class也是一个类的对象,通过类类型,反射获得类的成员属性,构造方法,成员方法,并调用类中的方法,也可以调用私有方法。
下面小编就为大家带来一篇利用java反射机制调用类的私有方法(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
使用JAVA反射机制动态调用 计算器对象的加法,减法函数。 使用JAVA反射机制修改一个学生对象 的私有数据成员(不允许调用setters) 使用的类有Class, Method, Field
使用Java反射机制动调用计算器的加法,加法函数 使用Java反射机制修改一个学生对象的私有数据成员
绍Java反射获取私有构造函数、属性、方法
java反射机制核心代码,小弟一直弄不明白,怎么通过反射来调用私有成员方法,看了这个后,你可以随心调用private方法,和属性,记得添加setAccessable(true),哦,要不还是不行,如:method.setAccessable(true);
java反射经典实例 看完之后,基本满足你要做的事情,其中包括修改各种私有属性,调用私有方法的例子代码。简单干练。
编写Student类,类中包含学生姓名,学号等私有数据成员。 使用JAVA反射机制修改一个学生对象的私有数据成员(不允许调用setters)
Java反射技术指的是在运行时动态地获取类的信息、调用对象的方法、操作类的属性等能力。通过反射,程序可以在运行时检查类、实例化对象、调用方法、获取和设置属性,甚至可以动态修改类的结构。 Java反射技术的核心...
Java 反射机制详解,适合初学者 1.获取 对象建模类的类型 的方法: 2.获取类中定义的构造方法: 获取类中定义的方法 获取类中定义的属性: 3.获取类实现的接口 4.利用反射实现类: 5.调用私有方法
可以学习如何通过Java的反射机制实例化对象、调用对象的方法、操作对象的私有成员变量、改变数组中的某项的值、改变数组大小等;可以学习Java的动态代理模式、学习Java工厂模式以及如何将工厂模式与属性文件相结合。
反射工具类. 提供调用getter/setter方法, 访问私有变量, 调用私有方法, 获取泛型类型Class, 被AOP过的真实类等工具函数
这里是个人整理的Java反射大杂烩,里面有获取类的继承关系,类的属性,类的方法,调用类中的方法,给类中私有属性赋值。。。。一系列操作。