当前位置:编程学习 > JAVA >>

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 ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,