Java 列出类的所有字段,如果它们与所需类型匹配,则将它们放入列表中

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

标题很混乱,但我想要实现的是对类中的所有(swing)按钮/标签调用一个方法。 (使它们看起来都很相似)

有点像这样:

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))
的内容替换
字段。