Как передать разные Generics в классе обратного вызова? - PullRequest
0 голосов
/ 07 февраля 2019

Для JFXTreeTableColumn я написал собственную фабрику ячеек в качестве обратного вызова.Код работает нормально, но что, если я хочу передать разные Generics?

Я уже пытался передать Generics как?или T, S, но я определенно сделал что-то не так

public class CallbackImpl implements Callback<TreeTableColumn<Order, String>, TreeTableCell<Order, String>> {

    private final ObservableList<String> paymentData;

    public CallbackImpl(ObservableList<String> paymentData) {
        this.paymentData = paymentData;
    }

    @Override
    public TreeTableCell<Order, String> call(TreeTableColumn<Order, String> tc) {
        ComboBox<String> combo = new ComboBox<>();
        combo.getItems().addAll(paymentData);
        JFXTreeTableCell<Order, String> cell = new JFXTreeTableCell<Order, String>() {
            @Override
            protected void updateItem(String payment, boolean empty) {
                super.updateItem(payment, empty);
                if (empty) {
                    setGraphic(null);
                } else {
                    combo.setValue(payment);
                    setGraphic(combo);
                }
            }
        };
        return cell ;
    }
}

Я хочу передать таблицу с <DifferentClass, String> или даже <DifferentClass, Integer> (я знаю, что мне нужно изменить код, чтобы Integer работал),

Использование в контроллере FXML: col.setCellFactory(new CallbackImpl(paymentData));

1 Ответ

0 голосов
/ 07 февраля 2019

Я только что быстро перешел на дженерики.Поскольку у меня нет полного кода, я не знаю, будет ли он все работать (или если все, что я изменил, ДОЛЖЕН быть изменен), но это даст вам приблизительное представление о том, как это сделать: D

class CallbackImpl<V, U> implements Callback<TreeTableColumn<V, U>, TreeTableCell<V, U>>
{

    private final ObservableList<U> paymentData;

    public CallbackImpl(ObservableList<U> paymentData) {
        this.paymentData = paymentData;
    }

    @Override
    public TreeTableCell<V, U> call(TreeTableColumn<V, U> tc) {
        ComboBox<U> combo = new ComboBox<>();
        combo.getItems().addAll(paymentData);
        JFXTreeTableCell<V, U> cell = new JFXTreeTableCell<V, U>() {
            @Override
            protected void updateItem(U payment, boolean empty) {
                super.updateItem(payment, empty);
                if (empty) {
                    setGraphic(null);
                } else {
                    combo.setValue(payment);
                    setGraphic(combo);
                }
            }
        };
        return cell ;
    }
}

Просто сделайте весь CallbackImpl универсальным, и тогда вы сможете указать, что вы хотите дать ему при его использовании.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...