java参数不匹配异常_java.lang.IllegalArgumentException:使用Reflection时参数类型不匹配...

本文探讨了在Java中使用反射调用方法时遇到的IllegalArgumentException异常问题,详细分析了问题产生的原因并给出了相应的解决办法。

下面是我的代码,我使用反射调用方法,但我总是得到

例外

List attrKeys = new ArrayList();

Properties adapterProps = new Properties();

PdReadRequest pdReadRequest = new PdReadRequest(1L, 1L, (short) 0, new Date(),

dataDurationSec, 2L, 3L, attrKeys, null, adapterProps);

PdAdapterUserReadOnlyGemsReader adapter1 = new PdAdapterUserReadOnlyGemsReader();

PdReader reader = adapter1.acquireReader(pdReadRequest);

UserCacheDoImpl userDos = Some Value;

Method method = getClassMethod("createPdRecordFromUserDO");

// This line is throwing me exception. And I don't know why?

PdRecord onePdsxRecord = (PdRecord) method.invoke(reader, userDos);

这是下面的方法,我从中获取类的所有方法名称.

private Method getClassMethod(String methodName) {

Method method = null;

Method[] methodList = PdAdapterUserReadOnlyGemsReader.PdUserReadOnlyGemsReader.class

.getDeclaredMethods();

for (Method m : methodList) {

if (m.getName().equals(methodName)) {

method = m;

method.setAccessible(true);

break;

}

}

return method;

}

更多代码: –

private PdRecord createPdRecordFromUserDO(UserCacheDoImpl userCache) {

// Some code here

}

这是我得到的例外.知道为什么吗?

java.lang.IllegalArgumentException: argument type mismatch

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)

at java.lang.reflect.Method.invoke(Method.java:599)

任何建议都会有很大帮助.

解决方法:

请检查是否存在多个名为“createPdRecordFromUserDO”的方法.

看起来有不止一个,但有不同的论点.

你的方法getClassMethod返回它找到的第一个方法,但那可能是错误的方法.

检查methodList.length> 1,那么这就是bug的原因.

如果找到具有给定名称的多个方法,请重新考虑您想要做什么.

标签:java,reflection

来源: https://codeday.me/bug/20190517/1123838.html

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值