0

在 JavaFX 应用程序中,我将 a 附加ChangeListener到 a TableCelltableRowProperty它是类型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语法而苦苦挣扎。

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 回答