你可以通过更改类的运行时行为从类外部调用私有方法。
借助于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
推荐阅读
- Java InetAddress类
- 在Applet中显示图形
- Java finally块
- Java异常传播
- Java中方法重写的异常处理
- 如何修复显示器屏幕变黑几秒钟(解决办法指南)
- esentutl.exe提示和指南(它是什么、用途、命令行)
- 什么是WD Discovery.exe(安全还是病毒、用途以及如何删除)
- 学习语言的20大Duolingo替代方案(最佳语言学习软件)