我正在运行IntelliJ IDEA Ultimate 2017.2并在以下代码块上发出检查警告Unchecked assignment: 'anonymous javafx.scene.control.TableCell' to 'javafx.scene.control.TableCell<com.something.RepStats,java.lang.Integer>'
:
colTopRepsRank.setCellFactory(new Callback<TableColumn<RepStats, Integer>, TableCell<RepStats, Integer>>() {
@Override
public TableCell<RepStats, Integer> call(TableColumn<RepStats, Integer> param) {
return new TableCell() {
@Override
protected void updateItem(Object item, boolean empty) {
super.updateItem(item, empty);
setGraphic(null);
setText(empty ? null : getIndex() + 4 + "");
}
};
}
}
);
我想弄清楚为什么会这样。如果我确实按照IntelliJ的建议使call()
方法只返回javafx.scene.control.TableCell
,我会收到其他错误,因为TableColumn
期待TableCell<RepStats, Integer>
。
答案 0 :(得分:3)
您收到错误是因为TableCell
(没有类型参数)的类型信息少于TableCell<RepStats, Integer>
(前者可能是另一个表视图/项目组合的TableCell
)。
为了解决问题,只需在TableCell
实施中返回正确键入的call()
即可:
return new TableCell<RepStats, Integer>() {
@Override
protected void updateItem(Integer item, boolean empty) {
// ...
}
}
答案 1 :(得分:1)
那是因为该方法期望返回类型为TableCell<RepStats, Integer>
,并返回未定义类型的TableCell。这意味着您应该使用方法所期望的类型添加泛型。
试试这个:
...
return new TableCell<RepStats, Integer>() {...}