java.lang.IllegalArgumentException:使用反射时参数类型不匹配

java.lang.IllegalArgumentException:使用反射时参数类型不匹配,java,reflection,Java,Reflection,下面是我的代码,我使用反射调用一个方法,但我总是得到 例外情况 List<PdAttrKey> attrKeys = new ArrayList<PdAttrKey>(); Properties adapterProps = new Properties(); PdReadRequest pdReadRequest = new PdReadRequest(1L, 1L, (short) 0, new Date(), dataDurationSec, 2L, 3L, at

下面是我的代码,我使用反射调用一个方法,但我总是得到 例外情况

List<PdAttrKey> attrKeys = new ArrayList<PdAttrKey>();
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 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,则这就是错误的原因


重新考虑如果找到具有给定名称的多个方法,您希望执行的操作。

能否显示该方法
PdReader.createPdsxRecordFromUserDO()
?它是否只需要一个参数,相同类型的
userDos
?以及
userDos
的类型是什么?您给了我们无关的信息(如何获取方法和设置内容),但没有提供有关您尝试调用的方法和调用内容的关键信息。很抱歉,没有发布其他代码。我刚刚用其他代码更新了这个问题。如果我还需要提供其他信息,请告诉我。
reader
PdUserReadOnlyGemsReader
的一个实例吗?你能给出一个简短但完整的例子来说明这个问题吗?基本上,这里仍然有很多无关的代码,但不足以让我们真正复制它。顺便问一下,有多个同名的方法吗?此外,代码看起来有点像黑客,因为您将该方法设置为可访问,最终该方法是私有的。此行(method.setAccessible(true)如果JVM的安全设置设置为高于标准的值,则可能会出现异常而失败。如果这并不能解决您的问题,并且当methodList.length==1时,请检查UserCacheDoImpl:的完整限定名是否都来自同一个包。例如,在代码中com.foo1.UserCacheDoImpl,而该方法可能需要com.foo2.UserCache打印出完整的限定参数名。(我认为Class.getCanonicalName()
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)