以下代码返回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并且我该如何修复它?
答案 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;
}