如何将Field强制转换为指定类型

时间:2019-07-10 13:53:39

标签: java swing reflection

我正在尝试使用Swing创建用户界面,但是我不想手动在组件数组中包含每个组件。

到目前为止,我尝试过的最好的方法是抛出一个异常,这是我无法真正拥有的。


for (Field f : this.getClass().getFields()) {
    if (f.getType().isAssignableFrom(JComponent.class)) {
        JComponent field = (JComponent) f.get(JComponent.class);
        components.add(field);
    }
}

我希望展示的代码不包含任何异常,但确实包含任何异常。 有什么方法可以做到而又不会有例外的风险?

1 个答案:

答案 0 :(得分:3)

不必使用

reflect离子用法。大多数情况下,创建component的原因是将其添加到容器中。将其添加到此处后,您可以使用Container#getComponents方法轻松地从容器中询问他们。

检查此示例:

JButton loadButton = new JButton("load");
JButton saveButton = new JButton("save");
JPanel panel = new JPanel();
panel.add(loadButton);
panel.add(saveButton);
for (Component component : panel.getComponents()) {
    // ...
}

为了给您更多帮助,您将必须告诉我们您想对这个数组做什么。我的意思是,您想在哪里使用它?


如果您坚持要使用它,则for应该是:

for (Field f : this.getClass().getDeclaredFields()) {
    if (JComponent.class.isAssignableFrom(f.getType())) {
        JComponent field = (JComponent) f.get(this);
        components.add(field);
    }
}
相关问题