JAVA反射机制基础:
参考:http://lavasoft.blog.51cto.com/62575/43218/
http://java.ccidnet.com/art/3539/20070924/1222147_1.htmlJAVA invoke的调用:
有如下的类
public class ClassA{
private int Method1(String[] strs){
int num=0;
for(String str:strs)
num++;
return num;
}
}
现在我们需要测试这个类中的Method1方法,按照java的反射机制我们可以用如下代码运行这个私有方法:
Class ownerClass=ClassA.class;
Method method= ownerClass.getDeclaredMethod("Method1");
method.setAccessible(true);
String[] strs= new String[]{"ssss","bbbb"};
ClassA ClassAinstance= new ClassA();
method.invoke(ClassAInstance,strs);
会产生参数数目不匹配的异常,原因是invoke函数的动态参数匹配,会讲strs映射到每一个参数上,而不是一个数组变量,解决方案:
Class ownerClass=ClassA.class;
Method method= ownerClass.getDeclaredMethod("Method1");
method.setAccessible(true);
String[] strs= new String[]{"ssss","bbbb"};
Object[] args=new Object[1];
args[0]=strs;
ClassA ClassAinstance= new ClassA();
method.invoke(ClassAInstance,args);