如何从Java中的另一个类调用私有方法

你可以通过更改类的运行时行为从类外部调用私有方法。
借助于java.lang.Class类和java.lang.reflect.Method类, 我们可以从任何其他类调用私有方法。
方法类的必需方法【如何从Java中的另一个类调用私有方法】1)public void setAccessible(boolean status)抛出SecurityException设置方法的可访问性。
2)公共对象invoke(对象方法, 对象… args)抛出IllegalAccessException, IllegalArgumentException, InvocationTargetException用于调用该方法。
Class类的必需方法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

    推荐阅读