引言
如何调用其他类的私有方法呢?
可以利用Java的反射机制,去调用其他类的私有方法
来吧·展示
package cn.learn.stady;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
/**
* 利用java反射机制调用类的私有方法
*
* @author Qing
* @date 2021/9/9 13:45
*/
public class ReflectionTest {
/**
* 反射调用私有方法
*
* @param obj obj
* @throws SecurityException 运行时异常 SecurityException 是 RuntimeException 的子类
* @throws NoSuchMethodException
* @throws IllegalArgumentException
* @throws IllegalAccessException
* @throws InvocationTargetException
*/
public static void setObjectColor(Object obj) throws SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException {
Class<?> cls = obj.getClass();
//获得类的私有方法
Method method = cls.getDeclaredMethod("privateMethod", (Class<?>[]) null);
//没有设置就会报错,因为权限访问异常
method.setAccessible(true);
//调用该方法
method.invoke(obj, (Object[]) null);
}
public static void main(String[] args) throws SecurityException, IllegalArgumentException, NoSuchMethodException, IllegalAccessException, InvocationTargetException {
setObjectColor(new MyTest());
}
}
/**
* 测试类
*/
class MyTest {
public void setMyTest() {
System.out.println("setMyTest");
}
/**
* 类的私有方法
**/
private void privateMethod() {
System.out.println("调用了 private Method");
}
}
参考链接
- Java反射原理简析 --2015-10-29
- 深入解析Java反射 - invoke方法 --2015-06-25
- Java反射及Method的invoke方法 --2013-04-18
- 关于反射调用方法的一个log --2009-12-14