繁体   English   中英

带Object []参数的Constructor.newInstance

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM