java - 在 ListDataProvider 中使用通用列表

标签 java gwt generics

当我想在基于 CellTree 的 GWT 应用程序中使用泛型时,我遇到了一个奇怪的问题。我特别想为树中的每个节点保存属于它的节点,即它的子节点。为此,我创建了一个通用类 NodeData。这当然使我的应用程序变得更加复杂和麻烦,但就节点而言,它已经完成了它的工作。我无法克服的一点是与每个节点对应的ListDataProviders的修改(刷新)。正如您在以下代码中看到的那样,这是泛型的问题:

static class NodeData<T extends BaseProxy> {
NodeData(T data) {
  this.data = data;
}

public T data;
public ListDataProvider<? extends NodeData<? extends BaseProxy>> children;
}

稍后在项目中我尝试了以下代码行:

NodeData<?> data = (NodeData<?>) value;
List<NodeData<? extends BaseProxy>> newData = new ArrayList<NodeData<? extends BaseProxy>>(data.children.getList());
newData.add(new NodeData<BaseProxy>(customer));
data.children.setList(newData);

虽然我没有得到编译错误,但我得到了关于最后一行的运行时错误,这对我来说似乎很奇怪,因为编译器没有检测到它:

The method setList(List<capture#9-of ? extends CustomTreeModel.NodeData<? extends BaseProxy>>) in the type ListDataProvider<capture#9-of ? extends CustomTreeModel.NodeData<? extends BaseProxy>> is not applicable for the arguments (List<CustomTreeModel.NodeData<? extends BaseProxy>>)

它与我从 ListDataProvider 获取的列表相同,但它无法接受它。我应该改变/做什么?

最佳答案

这很奇怪......

以下代码编译并运行没有任何问题。

public class CustomTreeModel {

    public static void main(final String[] args) {
        final BaseProxy customer = new Customer();
        final Object value = new NodeData<BaseProxy>(new Customer());
        final NodeData<?> data = (NodeData<?>) value;
        final List<NodeData<? extends BaseProxy>> newData = new ArrayList<NodeData<? extends BaseProxy>>(
                data.children.getList());
        newData.add(new NodeData<BaseProxy>(customer));
        data.children.setList(newData);
    }

    private static class Customer implements BaseProxy {

    }

    public static class NodeData<T extends BaseProxy> {
        NodeData(final T data) {
            this.data = data;
        }

        public T data;
        public ListDataProvider<? extends NodeData<? extends BaseProxy>> children = new ListDataProvider<NodeData<? extends BaseProxy>>();

    }
}

你能尝试一下吗?

您确定所有源代码都已编译吗?

也许您应该提供更多源代码。

关于java - 在 ListDataProvider 中使用通用列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12365151/

相关文章:

java - 如何获取 GWT CellTable 分页的总行数

c# - 我应该将通用存储库与 Entity Framework 5 一起使用吗?

java - intellij idea 仅对所有未提交的更改运行测试

java - Array/ArrayList如何直接找到对象的索引?或者ArrayList如何知道对象存储在这个地方?

java - Java 中 Atoi 表示负值

java - 修改Servlet参数

gwt - GWT。设置网址而不提交

java - Java 中的通用 fluent Builder

c# - objective-c 是否具有类似于 c# 的泛型类型(和约束)?

java - Tomcat 9 无法在 Ubuntu 上使用 Java 10