如何在投射前检查JComboBox的类型?

时间:2019-01-25 14:54:57

标签: java swing casting warnings type-safety

我正在尝试一种方法来清除JFrame中的所有字段。但是我遇到了来自Eclipse的警告。

private void clearAll(Container container) {

        for (Component component : container.getComponents()) {
            if (component instanceof JTextField) {
                JTextField field = (JTextField) component;

                field.setText("");
            }

            if (component instanceof JComboBox) {
                JComboBox<String> box = (JComboBox<String>) component;
                box.setSelectedIndex(-1);
            }

            if (component instanceof Checkbox) {
                Checkbox box = (Checkbox) component;

                box.setState(false);
            }

            if (component instanceof Container) {
                clearTextFields((Container) component);
            }
        }
    }

但是我收到此警告消息:

  

类型安全:未经检查的从Component到JComboBox的投射

现在我所有的组合框都是字符串,所以我认为它不会导致错误(我可能是错误的),但是我仍然想学习执行此操作的正确方法。

如果我将代码的组合框部分更改为:

    if (component instanceof JComboBox) {
                JComboBox box = (JComboBox) component;
                box.setSelectedIndex(-1);
            }

我收到另一条警告消息:

  

JComboBox是原始类型。泛型JComboBox的引用应参数化

我是新手,所以我不知道所有的方法/功能。如果可以轻松/以更好的方式完成我的所有重置方法,请通知我。我得到了清除网站上其他帖子中所有字段的原始方法。

1 个答案:

答案 0 :(得分:1)

怎么样:

   if (component instanceof JComboBox) {
        JComboBox<?> box = (JComboBox<?>) component;
        box.setSelectedIndex(-1);
   }