Java 列出类的所有字段,如果它们与所需类型匹配,则将它们放入列表中
标题很混乱,但我想要实现的是对类中的所有(swing)按钮/标签调用一个方法。 (使它们看起来都很相似) 有点像这样:Java 列出类的所有字段,如果它们与所需类型匹配,则将它们放入列表中,java,class,nullpointerexception,field,gettype,Java,Class,Nullpointerexception,Field,Gettype,标题很混乱,但我想要实现的是对类中的所有(swing)按钮/标签调用一个方法。 (使它们看起来都很相似) 有点像这样: for(Button btn: components) btn.setThisTheme(); 其中,components[]是一个JComponent-s数组。 到目前为止,我已经尝试过: // at beginning of class private LinkedList<JComponent> components = new Link
for(Button btn: components)
btn.setThisTheme();
其中,components[]
是一个JComponent-s数组。
到目前为止,我已经尝试过:
// at beginning of class
private LinkedList<JComponent> components = new LinkedList<>();
private Field[] fields = ToDo.class.getDeclaredFields().length;
// in constructor
for (Field field: fields) {
if(field.getType() == JComponent.class) {
components.add(field); // how to do this?
// field is a Field and i need to convert it into the variable it represents...
}
}
//在课程开始时
私有LinkedList组件=新LinkedList();
私有字段[]字段=ToDo.class.getDeclaredFields().length;
//在构造函数中
用于(字段:字段){
如果(field.getType()==JComponent.class){
components.add(field);//如何执行此操作?
//字段是一个字段,我需要将它转换为它表示的变量。。。
}
}
您正在创建一个null
s数组
private Field[] fields = new Field[ToDo.class.getDeclaredFields().length];
您应该能够直接使用getDeclaredFields
返回的数组
private Field[] fields = ToDo.class.getDeclaredFields();
几乎可以肯定的是,您可以在不进行反射的情况下更好地完成自己想做的事情。您正在创建一个
null
s数组
private Field[] fields = new Field[ToDo.class.getDeclaredFields().length];
您应该能够直接使用getDeclaredFields
返回的数组
private Field[] fields = ToDo.class.getDeclaredFields();
几乎可以肯定的是,你可以做你想做得更好的事情,而无需深思熟虑。好的,谢谢。我没有注意到这样一个简单的错误,有时候让别人读你的代码更好:)嗯。。。事实上,我在同一件事上还有另一个问题,我会编辑这篇文章question@KamilSuhak你应该问一个新问题。但是,要读取
字段
,需要实际的实例<代码>字段本身指的是所有对象,它甚至可能是一个静态字段。因此,用类似于(JComponent)(field.get(this))
的内容替换字段。我没有注意到这样一个简单的错误,有时候让别人读你的代码更好:)嗯。。。事实上,我在同一件事上还有另一个问题,我会编辑这篇文章question@KamilSuhak你应该问一个新问题。但是,要读取字段
,需要实际的实例<代码>字段
本身指的是所有对象,它甚至可能是一个静态字段。因此,用类似于(JComponent)(field.get(this))
的内容替换字段。