gpt4 book ai didi

java - 在 2 个对象中使用相同的通用通配符

转载 作者:行者123 更新时间:2023-12-02 11:54:24 24 4
gpt4 key购买 nike

我正在尝试复制 CellFactory来自一 TableColumn到另一个。我遇到的问题是泛型。

问题在于table.getColumns()返回 TableColumn<X, ?> 的列表我想创建一个新列,具有相同的 Tablecolumn<X, ?>参数,但我无法知道第二个,?参数。

for (TableColumn<X, ?> col : table.getColumns()) {
TableColumn<X, ?> newCol = new TableColumn<>();
newCol.setCellValueFactory(col.getCellValueFactory()); // Error <X, ?> != <X, ?>
}

我可以定义一个将在这两个实例中使用的泛型类型吗?或者由于通用信息在运行时丢失而无法实现?

编辑:

将其转换到 TableColumn<X, Object>似乎有效,但这感觉非常错误,我宁愿不依赖于转换到 Object .

for (TableColumn<X, ?> col : table.getColumns()) {
TableColumn<X, Object> tempCol = (TableColumn<X, Object>) col;
TableColumn<X, Object> newCol = new TableColumn<>();
newCol.setCellValueFactory(tempCol.getCellValueFactory());
}

最佳答案

在 Java 中,通配符代表未知类型。这意味着两个未知类型不能是同一类型。为了告诉编译器我们正在处理相同的未知类型,我们需要定义一个临时泛型类型 Y ,它将两个 TableColumn 绑定(bind)到同一类型。我们可以做到这一点的唯一方法是将新 TableColumn 的创建和更新移动到单独的参数化方法中,如下所示:

for ( TableColumn<X, ?> col : getColumns() ) {
TableColumn<X, ?> newCol = create(col);
}

public <Y> TableColumn<X, ?> create(TableColumn<X, Y> tc){
TableColumn<X, Y> newCol = new TableColumn<>();
newCol.setCellValueFactory( tc.getCellValueFactory() );
return newCol;
}

关于java - 在 2 个对象中使用相同的通用通配符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47699883/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com