0

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 の構文全般についても苦労しています。

4

1 に答える 1

1

次のコードでは警告が表示されません。

public final class PairingResultEditingCell extends TableCell<Pairing, Result> {

    private final ChoiceBox<Result> choiceField;

    private PairingResultEditingCell() {

        super();
        this.choiceField = new ChoiceBox<Result>();

        ReadOnlyObjectProperty<TableRow> roop= this.tableRowProperty();
        this.tableRowProperty().addListener(new ChangeListener<TableRow>() {
            @Override
            public void changed(ObservableValue<? extends TableRow> observable, TableRow oldValue, TableRow newValue) {
                choiceField.setVisible(newValue.getItem() != null);
            }
        });
    }
}
于 2012-06-20T11:19:50.813 に答える