1

以下代码返回 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,我该如何解决?

4

2 回答 2

0

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

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

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

        return null;
    }
于 2013-07-04T01:10:42.907 回答
0

null它在异常块中以静默失败的方式返回。显示堆栈跟踪以显示异常的来源。

主要问题是您需要使用与传入的构造函数参数相对应的匹配类类型参数,而不是特定JComponent本身的类型来定位正确的构造函数。即JTextField(字符串)

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;
}
于 2013-07-04T01:18:11.987 回答