Java IntelliJ-为什么这是未经检查的作业?
我正在运行IntelliJ IDEA Ultimate 2017.2,并且在以下代码块上有一个检查警告Java IntelliJ-为什么这是未经检查的作业?,java,intellij-idea,Java,Intellij Idea,我正在运行IntelliJ IDEA Ultimate 2017.2,并且在以下代码块上有一个检查警告未选中的分配:“匿名javafx.scene.control.TableCell”到“javafx.scene.control.TableCell”: colTopRepsRank.setCellFactory(new Callback<TableColumn<RepStats, Integer>, TableCell<RepStats, Integer>>(
未选中的分配:“匿名javafx.scene.control.TableCell”到“javafx.scene.control.TableCell”
:
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 + "");
}
};
}
}
);
colTopRepsRank.setCellFactory(新回调(){
@凌驾
公共TableCell调用(TableColumn参数){
返回新的TableCell(){
@凌驾
受保护的void updateItem(对象项,布尔值为空){
super.updateItem(项,空);
设置图形(空);
setText(空?null:getIndex()+4+“”);
}
};
}
}
);
我正试图弄明白为什么会发生这种情况。如果我按照IntelliJ的建议,让
call()
方法只返回javafx.scene.control.TableCell
,我会收到其他错误,因为TableColumn
需要TableCell
之所以出现错误,是因为TableCell
(不带类型参数)的类型信息少于TableCell
(前者可能是另一个表视图/项目组合的TableCell
)
为了修复它,在call()
实现中返回正确键入的TableCell
就足够了,比如:
return new TableCell<RepStats, Integer>() {
@Override
protected void updateItem(Integer item, boolean empty) {
// ...
}
}
返回新的TableCell(){
@凌驾
受保护的void updateItem(整数项,布尔值为空){
// ...
}
}
出现错误是因为TableCell
(无类型参数)的类型信息少于TableCell
(前者可能是另一个表视图/项目组合的TableCell
)
为了修复它,在call()
实现中返回正确键入的TableCell
就足够了,比如:
return new TableCell<RepStats, Integer>() {
@Override
protected void updateItem(Integer item, boolean empty) {
// ...
}
}
返回新的TableCell(){
@凌驾
受保护的void updateItem(整数项,布尔值为空){
// ...
}
}
这是因为该方法希望返回类型为TableCell
,而您返回的是未定义类型的TableCell。这意味着您应该添加泛型和方法所需的类型。
试试这个:
...
return new TableCell<RepStats, Integer>() {...}
。。。
返回新的TableCell(){…}
这是因为该方法希望返回类型为TableCell
,而您返回的是未定义类型的TableCell。这意味着您应该添加泛型和方法所需的类型。
试试这个:
...
return new TableCell<RepStats, Integer>() {...}
。。。
返回新的TableCell(){…}
您不需要返回新的TableCell而不是原始TableCell吗?您不需要返回新的TableCell而不是原始TableCell吗?或者现在使用Java 9,返回新的TableCell(){
(我自己还没有测试过,但是diamond操作符应该在Java 9中对可表示的类型起作用)@MarkPeters在Java 8中工作。MartinStettner,谢谢你;这对我来说是可行的!@Zephyr:你确定吗?我收到一个错误“不能将“”用于匿名内部类”.diamond运算符是在Java 7中引入的。是的,但据我所知,在匿名内部类上使用它的能力是从Java 9开始的。请参见此处:或者现在使用Java 9,返回新的TableCell(){
(我自己还没有测试过,但diamond运算符应该在Java 9中处理可表示类型)@MarkPeters在Java 8中工作。MartinStettner,谢谢你;这对我来说是可行的!@Zephyr:你确定吗?我收到一个错误“不能将“”用于匿名内部类”。Java 7中引入了菱形运算符。是的,但据我所知,在匿名内部类上使用菱形运算符的能力是从Java 9开始的。请参阅此处: