CellTree に基づく GWT アプリケーションで Generics を使用したい場合、Generics で奇妙な問題が発生します。特に、ツリー内のすべてのノードに対して、それに属するノード、つまりその子ノードを保持したいと考えています。この目的のために、汎用クラス 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 から取得したのと同じリストですが、それを受け入れることはできません。何を変更/実行する必要がありますか?