0

我想知道为什么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都没有,不要对我说什么。该错误的解决方案也设置为不会修复,但我不明白为什么,或者为什么以这种方式开发,没有通用。你能解释一下或给出一些我可以用来理解它的东西吗?

4

0 回答 0