我想封装一个能够调用反射的方法:
public Object invokeSysConfigMethod(String methodName,Object ObjParas[],Class parameterTypes[]){
try {
Class<?> sysConfigClass = Class.forName("org.ngb.system.SysConfig");
Method getInstanceMethod = sysConfigClass.getMethod("getInstance",null);
Object sysConfigImplObj = getInstanceMethod.invoke(null);
if(ObjParas != null && ObjParas.length > 0 && parameterTypes == null){
parameterTypes = new Class[ObjParas.length];
for(int i = 0;i<ObjParas.length;i++){
if(ObjParas[i] != null)
parameterTypes[i] = ObjParas[i].getClass();
}
}
Method method = sysConfigClass.getMethod(methodName,parameterTypes );
Object resObj = method.invoke(sysConfigImplObj, ObjParas);
return resObj;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
却发现调用函数中有int型的方法时找不到正确的方法,为了说明出现问题的原因,下面是例子:
Class sysConfigClass {
Static void aaaa(int a){
}
}
Void main(){
int a = 5;
Class<?> sysConfigClass = Class.forName("sysConfigClass ");
Method method = sysConfigClass.getMethod(“aaaa”,a.getClass()); //出错
Method method = sysConfigClass.getMethod(“aaaa”,int.class); //正确
//出错原因 a已经被封装成了Integer类型. 已经不是int了 ,所以会找不到原来的方法.这个封包在这里害人了,我原先是想封装个反射的方法,但是这个传进去的整形对象却不能拿到正确的int类型了,反而拿到的Integer类型.
}