IntelliJ - 为什么这是未经检查的分配?

时间:2017-09-22 13:30:43

标签: java intellij-idea

我正在运行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>

2 个答案:

答案 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>() {...}