Java 如何在回调类中传递不同的泛型?

Java 如何在回调类中传递不同的泛型?,java,javafx,callback,Java,Javafx,Callback,对于JFXTreeTableColumn,我编写了一个自定义单元工厂作为回调。代码工作正常,但如果我想传递不同的泛型呢 我已经试着把泛型作为?或者T,但我肯定做错了什么 public class CallbackImpl implements Callback<TreeTableColumn<Order, String>, TreeTableCell<Order, String>> { private final ObservableList<

对于JFXTreeTableColumn,我编写了一个自定义单元工厂作为回调。代码工作正常,但如果我想传递不同的泛型呢

我已经试着把泛型作为?或者T,但我肯定做错了什么

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 ;
    }
}
public类CallbackImpl实现回调{
私人最终可观测列表支付数据;
公共CallbackImpl(ObservableList paymentData){
this.paymentData=paymentData;
}
@凌驾
公共TreeTableCell调用(TreeTableColumn tc){
ComboBox combo=新ComboBox();
combo.getItems().addAll(paymentData);
JFXTreeTableCell=新的JFXTreeTableCell(){
@凌驾
受保护的void updateItem(字符串付款,布尔值为空){
super.updateItem(付款,空);
if(空){
设置图形(空);
}否则{
组合设置值(付款);
设置图形(组合);
}
}
};
返回单元;
}
}
我想传递一个带有
甚至
的表(我知道我必须更改整数的代码才能工作)

FXML控制器中的用法:
col.setCellFactory(新CallbackImpl(paymentData))

我刚刚对泛型做了一个快速更改。由于我没有完整的代码,我不知道它是否会全部工作(或者我所更改的所有内容是否都应该更改),但它会让您大致了解如何尝试这样做: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实现回调 { 私人最终可观测列表支付数据; 公共CallbackImpl(ObservableList paymentData){ this.paymentData=paymentData; } @凌驾 公共TreeTableCell调用(TreeTableColumn tc){ ComboBox combo=新ComboBox(); combo.getItems().addAll(paymentData); JFXTreeTableCell=新的JFXTreeTableCell(){ @凌驾 受保护的无效更新项(U付款,布尔值为空){ super.updateItem(付款,空); if(空){ 设置图形(空); }否则{ 组合设置值(付款); 设置图形(组合); } } }; 返回单元; } }

只需将整个CallbackImpl设置为通用,然后您就可以指定在使用它时希望提供的内容。

几点注意事项:a)您可以自己查看一下core fx中的代码b)不要重新发明轮子,有一个ComboBoxTreeTableCellto a)是的,100%我将第一个通用设置在错误的位置。应该读更多关于泛型的书。对于b)我处理了以下内容,ComboBoxTreeTableCell仅显示一个Combobox(如果已编辑)。在我的例子中,我想看到每个组合框。至于b,我忽略了一个好的点:)