在 JavaFX 应用程序中,我将 a 附加ChangeListener
到 a TableCell
,tableRowProperty
它是类型ChangeListener<? super TableRow>
(并且TableRow<T>
也是通用的)。
我所做的是以下内容:
public final class PairingResultEditingCell extends TableCell<Pairing, Result> {
private final ChoiceBox<Result> choiceField;
// Unchecked casts and raw types are needed to wire the
// tableRowProperty changed listener
@SuppressWarnings({ "unchecked", "rawtypes" })
private PairingResultEditingCell() {
super();
this.choiceField = new ChoiceBox<Result>();
// ReadOnlyObjectProperty<TableRow> javafx.scene.control.TableCell.tableRowProperty()
this.tableRowProperty()
// this cast is the actual source of the warnings
// rawtype of TableRow<T>: ChangeListener<? super TableRow>
.addListener((ChangeListener<? super TableRow>) new ChangeListener<TableRow<Result>>() {
@Override
public void changed(
final ObservableValue<? extends TableRow<Result>> observable,
final TableRow<Result> oldValue,
final TableRow<Result> newValue) {
choiceField.setVisible(newValue.getItem() != null);
}
});
}
}
我需要两个抑制两种警告来做到这一点:@SuppressWarnings({ "unchecked", "rawtypes" })
. rawtype 警告似乎只是Eclipse。然而,Jenkins CI 服务器拒绝编译代码,因为前者(我无法更改其配置)。
有没有办法在没有未经检查的强制转换和原始类型的情况下做到这一点?我尝试了一个实现接口的内部类,但我被卡住了。一般来说,我也在为 Java 的? super MyClass
语法而苦苦挣扎。
- Oracle 文档:TableCell 类
- Oracle Docs:类 ReadOnlyObjectProperty(
tableRowProperty
的返回类型) - Oracle Docs:接口 ChangeListener