这可能是一个非常愚蠢的方法,但是说我们有一个有很多字段组成的类,如何用反射在每个循环中添加它们?
这是我迄今为止尝试过的事情(尽管显然注定要失败):
for(Field bits: this.getClass().getDeclaredFields()){
try {
this.add((Component)Class.forName(bits.getName()).newInstance());
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
每个字段不一个类,所以上面的操作不起作用,但我已经定义了它们是什么,它们应该在运行时存在。
我该怎么做?
答案 0 :(得分:1)
您尝试从字段名称创建一个类,因此它不起作用。
bits.getName()返回类似“myHelloWorldLabel”而不是javax.swing.JLabel。
您可以添加字段bits.get(this)
的值,也可以从类bits.getDeclaringClass().newInstance()
创建新对象。
我还要添加一个检查,该类扩展了JComponent。