我的架构有一些类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,它的子元素发送到下一个,所以...
答案 0 :(得分: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;
}
答案 1 :(得分:1)
您的定义是:
T extends XMLElement<U>, U extends XMLElement<?>
因此T
属于XMLElement
类型或其子类型之一。
U
属于XMLElement
类型或其子类型之一。
总之,T
和U
属于同一类型,据我所见,您应该能够将定义简化为
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();
}