📅  最后修改于: 2020-10-01 05:54:27             🧑  作者: Mango
您可以通过更改类的运行时行为从类外部调用私有方法。
借助于java.lang.Class类和java.lang.reflect.Method类,我们可以从任何其他类调用私有方法。
1)public void setAccessible(boolean status)抛出SecurityException设置方法的可访问性。
2)公共对象invoke(Object method,Object … args)引发IllegalAccessException,IllegalArgumentException,InvocationTargetException用于调用该方法。
1)公共方法getDeclaredMethod(String name,Class [] parameterTypes)抛出NoSuchMethodException,SecurityException:返回一个Method对象,该对象反映了该类对象或该Class对象表示的接口的指定声明方法。
让我们看一下从另一个类调用私有方法的简单示例。
public class A {
private void message(){System.out.println("hello java"); }
}
import java.lang.reflect.Method;
public class MethodCall{
public static void main(String[] args)throws Exception{
Class c = Class.forName("A");
Object o= c.newInstance();
Method m =c.getDeclaredMethod("message", null);
m.setAccessible(true);
m.invoke(o, null);
}
}
Output:hello java
让我们看一下从另一个类调用参数化私有方法的示例
class A{
private void cube(int n){System.out.println(n*n*n);}
}
import java.lang.reflect.*;
class M{
public static void main(String args[])throws Exception{
Class c=A.class;
Object obj=c.newInstance();
Method m=c.getDeclaredMethod("cube",new Class[]{int.class});
m.setAccessible(true);
m.invoke(obj,4);
}}
Output:64