Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 带反射的IllegargumentException_Java_Reflection_Itext - Fatal编程技术网

Java 带反射的IllegargumentException

Java 带反射的IllegargumentException,java,reflection,itext,Java,Reflection,Itext,下面是一个小测试代码,它将背景设置为itext块对象。我打算使用反射在块对象上执行以下方法 Chunk Chunk=新Chunk();BaseColor BaseColor=新的BaseColor(45,90135);块.背景(基色) package com.blubench.test; 导入java.lang.reflect.Constructor; 导入java.lang.reflect.InvocationTargetException; 导入java.lang.reflect.Metho

下面是一个小测试代码,它将背景设置为itext块对象。我打算使用反射在块对象上执行以下方法 Chunk Chunk=新Chunk();BaseColor BaseColor=新的BaseColor(45,90135);块.背景(基色)

package com.blubench.test;
导入java.lang.reflect.Constructor;
导入java.lang.reflect.InvocationTargetException;
导入java.lang.reflect.Method;
导入com.itextpdf.text.Chunk;
公共类BaseColorReflection{
静态最终字符串methodName=“setBackground”;
静态最终字符串className=“com.itextpdf.text.Chunk”;
静态最终字符串param=“com.itextpdf.text.BaseColor”;
公共静态void main(字符串[]args)抛出ClassNotFoundException、SecurityException、NoSuchMethodException、IllegalArgumentException、InstanceionException、IllegalAccessException、InvocationTargetException{
//**********目标类**************
Class chunkClass=Class.forName(className);
Chunk=(Chunk)chunkClass.newInstance();
//*********参数对目标法*********
Class baseColorClass=Class.forName(参数);
类[]argTypes={int.Class,int.Class,int.Class};
构造函数baseColorCtor=baseColorClass.getDeclaredConstructor(argTypes);
对象[]argValues={45,90135};
Object baseColorObject=baseColorCtor.newInstance(argValues);
//*********目标方法****************
方法Method=chunkClass.getDeclaredMethod(方法名,baseColorObject.getClass());
试一试{
//***********使用参数对目标类调用目标方法**********
调用(chunk,baseColorObject.getClass());
}捕获(IllegalArgumentException e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}捕获(非法访问例外e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}捕获(调用TargetException e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}   
}
这就是我得到的

java.lang.IllegalArgumentException:处的参数类型不匹配 sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)位于 位于的sun.reflect.NativeMethodAccessorImpl.invoke(未知源) sun.reflect.DelegatingMethodAccessorImpl.invoke(未知源)位于 java.lang.reflect.Method.invoke(未知源代码)位于 com.blubench.test.BaseColorReflection.main(BaseColorReflection.java:33)


这是一个非常常见的问题,但我无法确定是什么导致了这一问题?

传递参数实例,而不是参数的类:

改变

method.invoke(chunk, baseColorObject.getClass());

method.invoke(chunk, baseColorObject.getClass());
method.invoke(chunk, baseColorObject);