在invoke一个参数替int类型的方法时发生的故障

在invoke一个参数为int类型的方法时发生的故障

日期: 2011.5.27
平台: windows,eclipse,jdk1.6
问题简述: 最近在测试一个类中的私有方法,使用了JUnit-addons包中的PrivateAccessor.invoke方法。
这个方法的签名是invoke(java.lang.Class cls, java.lang.String name, java.lang.Class[] parameterTypes, java.lang.Object[] args).

第一个参数是要调用的类名,第二个参数是调用的私有方法名称。第三个参数是调用方法的参数类型。第四个参数是传入的参数列表。
关键就是第三个参数,需要传入参数的类型。因为int是基本类型,对应的包装类是Integer。所以想当然的传入了Integer.class参数。运行测试的时候,报【java.lang.NoSuchMethodException 】错误。
发生原因: 参数的类型一定要和调用方法的参数类型一致。如果方法的参数类型是基本类型,可以传【基本类型.class】。
解决方案: 将Integer.class修改为int.class后,测试顺利通过。
通过查找api,发现在class类中有如下一段话:基本的 Java 类型(boolean、byte、char、short、int、long、float 和 double)和关键字 void 也表示为 Class 对象。
引用文章地址或网址:
http://junit-addons.sourceforge.net/
再发防止:无