2

我的体系结构有一些类 XMLElement (定义为其子类的类型内部类型)

为什么不编译这个?

private static <T extends XMLElement<U>, U extends XMLElement<?>> T recursiveFilter(T root){
        T filteredRoot = root;
        //Some filtering stuff
        for (U child : root.getSubElements()){
            U cleanChild = recursiveFilter(child); //Here comes the problem, it says reursiveFilter can only accept T but now we are sending U != T
        }
        return filteredRoot;
    }
}

我正在将 U(T 的子级)发送到当前迭代的函数,但 U 在下一次迭代中变为 T,然后它将 U,它的子级,发送到下一个,等等......

4

2 回答 2

3

你不能使用:

private static <T extends XMLElement<T>> T recursiveFilter(T root) {
    T filteredRoot = root;
    //Some filtering stuff
    for (T child : root.getSubElements()) {
        T cleanChild = recursiveFilter(child);
    }
    return filteredRoot;
}
于 2012-08-01T23:02:08.907 回答
1

你的定义是:

T extends XMLElement<U>, U extends XMLElement<?>

因此T是类型XMLElement或其子类型之一。并且U是类型XMLElement或其子类型之一。

总之,TU是相同的类型,据我所知,您应该能够将定义简化为

private static <T extends XMLElement<T>> T recursiveFilter(T root) {
  //...
}

至少我知道这对我来说很好:

static <T extends XMLElement<T>> T recursiveFilter(T root){
    T filteredRoot = root;
    for(T child: root.getSubElements()){
        T cleanChild = recursiveFilter(child);
    }
    return filteredRoot;
}

interface XMLElement<T> {
    List<T> getSubElements();
}
于 2012-08-02T00:10:30.113 回答