Java 在ListDataProvider中使用通用列表

Java 在ListDataProvider中使用通用列表,java,gwt,generics,Java,Gwt,Generics,在基于CellTree的GWT应用程序中使用泛型时,我遇到了一个奇怪的问题。我特别想为树中的每个节点保留属于它的节点,即它的子节点。为此,我创建了一个泛型类NodeData。这当然使我的应用程序更加复杂和麻烦,但就节点而言,它已经完成了它的工作。我无法克服的一点是修改(刷新)对应于每个节点的ListDataProviders。这是泛型的一个问题,正如您在以下代码中看到的: static class NodeData<T extends BaseProxy> { NodeData(T

在基于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;
}
静态类节点数据{
节点数据(T数据){
这个数据=数据;
}
公共数据;
公共ListDataProvider数据=(NodeData)值;
这太奇怪了

下面的代码编译和运行时没有任何问题

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>>();

    }
}
公共类CustomTreeModel{
公共静态void main(最终字符串[]args){
最终BaseProxy客户=新客户();
最终对象值=新节点数据(新客户());
最终节点数据=(节点数据)值;
最终名单
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>>)
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>>();

    }
}