java instanceof运算符和类返回方法

时间:2013-05-10 13:39:51

标签: java instanceof

我正在编写自己的TableModel实现。由于我需要一些共享某些功能的各种实现,我决定首先准备一个抽象类。表格的字段表示为:

protected Object[][] lines;

基本上,同一列中的所有元素应该是相同的类型,但是列类可能因不同的实现而异。我想在抽象类中编写一个通用的setValueAt函数,检查val是否属于正确的类型。

@Override
public void setValueAt(Object val, int row, int col) {
    if (val instanceof this.getColumnClass(col))
        lines[col][row] = val;
}

编译器在此处发出错误信号:

Syntax error on token "instanceof", == expected

为什么呢?

2 个答案:

答案 0 :(得分:6)

instanceof的右操作数必须是ReferenceType (JLS 15.20)。使用

if (this.getColumnClass(col).isInstance(val))

答案 1 :(得分:2)

您可以考虑在抽象类中使用泛型类型,而不是使用instanceof。您可以用以下内容声明它:

protected abstract class MyTableModel<T> implements TableModel {
    //...
    protected T[][] lines;
    //...
    @Override
    public void setValueAt(Object val, int row, int col) {
        lines[col][row] = (T) val;
    }
}

这样,您可以让Java处理强制转换的类型检查。

如果类之间的唯一区别是值的类型,您也可以只写一个泛型类。