java instanceof运算符和类返回方法

java instanceof运算符和类返回方法,java,instanceof,Java,Instanceof,我正在编写自己的TableModel实现。因为我需要一些不同的实现来共享一些功能,所以我决定先准备一个抽象类。表中的字段表示为: protected Object[][] lines; 基本上,同一列中的所有元素都应该是相同的类型,但是列类在不同的实现中可能会有所不同。我想在抽象类中编写一个常见的setValueAt函数,检查val的类型是否正确 @Override public void setValueAt(Object val, int row, int col) { if (v

我正在编写自己的
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

为什么?

实例的右操作数必须是
引用类型
。使用


<>而不是使用<代码>实例> <代码>,您可以考虑在抽象类中使用泛型类型。您可以使用以下内容进行声明:

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;
    }
}
受保护的抽象类MyTableModel实现TableModel{
//...
受保护的T[][]线路;
//...
@凌驾
public void setValueAt(对象值、整行、整列){
行[col][row]=(T)val;
}
}
通过这种方式,您可以让Java处理强制转换的类型检查


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

getColumnClass
方法看起来像什么?它的摘要。重要的是它得到一个
int columnIndex
参数,并按照
TableModel
接口的要求返回
Class
结果。谢谢。您的建议很宝贵,但关键是,
由各种类型的数据组成。例如,第一列是
整数
,下一列是
字符串
,依此类推。在另一个子类中,可能有两个
Integer
列,并且根本没有
String
。在这种情况下,我可能会创建一个通用的
类,并实现
表格模型
,作为某种类型的
集合
的包装器。当然,这是品味的问题。听起来很有趣。您认为如何将我的
作为
表格列
的子类?然后,model类还可以实现
TableColumnModel
接口,防止
TableModel
TableColumnModel
之间可能存在的数据冲突。我还没有真正研究过
TableModel
——我没有做太多gui工作——所以我真的不能说。
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;
    }
}