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;
}
}