如何在具有多个类的数组中转换对象?

时间:2016-05-20 17:07:37

标签: java arrays swing

我有一个包含JTextField和JComboBox对象的JComponent对象数组。我选择制作一个阵列而不是两个以提高效率。但是,如果我迭代对象,我似乎无法正确地转换它们,因为我的IDE无法识别示例代码的最后一行中的.setText()方法。如何正确投射物品?

JComponent[] items = {JTextField1, JComboBox1};
for (JComponent item : items) {
    if (item instanceof JTextField) {
        item = (JTextField) item;
        item.setText(null);
    }
    else {
        item = (JComboBox) item ;
        item.setSelectedIndex(-1);
    }
}

1 个答案:

答案 0 :(得分:4)

这样简单吗

if (item instanceof JTextField) {
    ((JTextField) item).setText(null);
}
else {
    ((JComboBox) item).setSelectedIndex(-1);
}

解释

当您在列表上进行迭代时,每个item变量都会被视为JComponent。但您需要的是为特定子类型调用方法(例如JTextField)。所以解决方案就是在调用所需方法之前将item变量强制转换为特定的Subtype。