我想知道为什么TableCell
'sgetTableRow()
方法没有 Generic 而 Table 单元格有,很明显返回类型与单元格的泛型定义相同。举个例子:
我有一堂课:
class MyCustomCell<S extends MyType, T> extends TableCell<S, T> {
@Override
protected void updateItem(T item, boolean empty) {
super.updateItem(item, empty);
if(empty){
setText(null);
}else {
S data = (S) getTableRow().getItem();
// do something with data.
}
}
}
首先,我必须将其强制转换为(S)
,并且有一个警告:
未经检查的强制转换:java.lang.Object。原因:'getTableRow()' 具有原始类型,因此 getItem 的结果被擦除。但为什么?例如,在TreeTableCell
这个工作正常的方法有:
public final TreeTableRow<S> getTreeTableRow() { return treeTableRow.get(); }
所以你不必将它强制转换为(S)
. 我正在研究一点,我发现了这个:https://bugs.openjdk.java.net/browse/JDK-8096461,但是这个链接和相应方法的javadoc都没有,不要对我说什么。该错误的解决方案也设置为不会修复,但我不明白为什么,或者为什么以这种方式开发,没有通用。你能解释一下或给出一些我可以用来理解它的东西吗?