JavaFX アプリケーションで、 aChangeListener
を aTableCell
のにアタッチしました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);
}
});
}
}
これを行うには、2 種類の警告を抑制する必要があります@SuppressWarnings({ "unchecked", "rawtypes" })
。rawtype の警告はEclipse のみのようです。ただし、Jenkins CI サーバーは、前者のためにコードのコンパイルを拒否します (そして、その構成を変更することはできません)。
未チェックのキャストと生の型なしでこれを行う方法はありますか? インターフェイスを実装する内部クラスを試しましたが、行き詰まりました。? super MyClass
また、Java の構文全般についても苦労しています。