Java从外部调用类的私有方法
考虑到我们有这样一个奇怪的类:
[java]
package org.tsw;
public class SecretTool {
private SecretTool() {
}
private void myMotto() {
System.out.println("I like potato");
}
private int calculate(int left,int right) {
return left + right;
}
}
奇怪之处有两点,第一个,该类显示声明一个私有构造器(编译器不会自动添加默认无参构造器),通常情况下,我们无法得到它的一个实例,即使得到它的一个实例,我们也没法用它,因为它的两个方法都是私有的。
如何才能够调用它的方法呢?利器是反射(reflection)
[java]
public static void main(String[] args) throws Exception {
Constructor<?> constructor = SecretTool.class.getDeclaredConstructors()[0];
constructor.setAccessible(true);
SecretTool tool = (SecretTool) constructor.newInstance(); // 得到它的一个实例
for(Method method : SecretTool.class.getDeclaredMethods()) {
method.setAccessible(true);
if(method.getName().equals("myMotto")) {
method.invoke(tool); // 调用没有返回值,无参的私有方法
} else if(method.getName().equals("calculate")) {
Integer result = (Integer)method.invoke(tool, 1,2);
System.out.println("1 + 2 = " + result.toString()); // 调用返回值为整数,且带参的私有方法
}
}
}
输出结果:
[plain]
I like potato
1 + 2 = 3
补充:软件开发 , Java ,