使用Constructor类newInstance()

时间:2013-07-04 01:05:40

标签: java class constructor null

以下代码返回null:

    private JComponent setupComponent(Class<? extends JComponent> c, Object... constructor) {

        try {
            return c.getConstructor(new Class[] { c.getClass() }).newInstance(constructor);
        }
        catch (Exception e) { }

        return null;
    }

我在这里叫它:

    JTextField userText = (JTextField) setupComponent(JTextField.class, "Test");

为什么它返回null并且我该如何修复它?

2 个答案:

答案 0 :(得分:0)

您需要使用类的静态版本。

   private JComponent setupComponent(Class<? extends JComponent> c, Object... constructor) {

        try {
            return c.getConstructor(new Class[] { c}).newInstance(constructor);
        }
        catch (Exception e) { }

        return null;
    }

答案 1 :(得分:0)

它正在返回null,因为它在异常块中无声地失败。显示堆栈跟踪以显示异常的来源。

主要问题是你需要使用匹配类类型参数,这些参数对应于传入的构造函数参数,而不是特定JComponent本身的类型,以定位正确的构造函数。即JTextField(String)

private JComponent setupComponent
                 (Class<? extends JComponent> c, Object... constructor) {

    // build matching class args    
    Class<?>[] classArgs = new Class[constructor.length];
    for (int i = 0; i < constructor.length; i++) {
        classArgs[i] = constructor[i].getClass();
    }

    try {
        return c.getConstructor( classArgs ).newInstance(constructor);
    } catch (Exception e) {
        e.printStackTrace(); // add this
    }

    return null;
}