java - 如何在回调类中传递不同的泛型?
问题描述
对于 JFXTreeTableColumn,我编写了一个自定义单元工厂作为回调。代码工作正常,但如果我想传递不同的泛型怎么办?
我已经尝试将泛型传递为 ? 或 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 ;
}
}
我想传递一个 Table<DifferentClass, String>
甚至<DifferentClass, Integer>
(我知道我必须更改代码才能使 Integer 工作)。
FXML 控制器中的用法:
col.setCellFactory(new 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 设为通用,然后您可以在使用它时指定您希望给它的内容。
推荐阅读
- tomcat - 如何在 Windows Server 2016 中使用 tomcat 配置 Stackify 前缀?
- python - Pygame矩形都聚在一起
- blazor - 在 Blazor 中显示可重用的 VueJS 图表组件
- python - 在散景图中选择和更新熊猫数据框列
- spring - ::TIMESTAMP::DATE 在 Java/Spring 中工作吗?
- python - 错误框中的混淆矩阵值
- java - 使用 WebFlux 使用 cookie 跟踪重定向
- android-studio - 将包导入flutter(Andriod Studio)时面临一个大问题。我已经尝试了其他解决方案的所有方法
- laravel - Lumen 主页在 AWS 上有效,但其他主页无效
- machine-learning - tensorflow.js 模型不学习