[英]Constructor.newInstance with Object[] argument
我已经使用Java进行了很长时间的编程,由于某种原因,我无法弄清楚为什么这给了我一个参数类型不匹配的原因。 我创建了一个非常简单的JUnit测试,任何人都可以运行。 只需复制并粘贴以下代码即可。 任何帮助将非常感激。 谢谢!
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import org.junit.Test;
public class TestObjectArrayConstructor {
@Test
public void testLabelValueObjectArrayConstructor(){
Constructor constructor = null;
try {
constructor = LabelValue.class.getConstructor(
new Class[]{Object[].class});
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Object[] array = new Object[]{"Doll"};
Object labelValue = null;
try {
labelValue = constructor.newInstance(array);
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("don");
}
}
public class LabelValue {
private String label;
private String value;
public LabelValue(){
}
public LabelValue(Object[] array)
{
if(array != null && array.length > 0)
{
this.label = (String)array[0];
this.value = (String)array[0];
}
}
public String getLabel() {
return label;
}
public void setLabel(String label) {
this.label = label;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
试试这个(未经测试):
constructor.newInstance(new Object[]{array});
因为newInstance需要一个Object数组(不同的args),并且您的情况是模棱两可的,因为您的param是Object数组。
如果要从constructor
创建newInstance
,则需要传递实际参数,在这种情况下,将单个参数array
作为new Object[]
传递:
labelValue = constructor.newInstance(array);
与
labelValue = constructor.newInstance(new Object[]{array});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.