我遇到了访问者模式和泛型的问题。我有一些抽象类要访问其孩子。看看这段代码:
public abstract class Element extends SomeSuperClass {
public void accept(Visitor<? extends Element> v) {
v.visit(this);
}
}
public interface Visitor<T extends SomeSuperClass> {
void visit(T element);
}
所以想法是:我有一些类层次结构(例如Element
是 的子类SomeSuperClass
)。我有一些通用Visitor
接口来访问这个层次结构。现在在这个层次结构的中间是Element
类,它是抽象的并且有它自己的子类。
现在我想Element
接受它的子类的所有访问者,这就是我放这行的原因:
public void accept(Visitor<? extends Element> v)
但现在我收到错误:
类型中的方法访问(
capture#1-of ? extends Element
)Visitor<capture#1-of ? extends Element>
不适用于参数(Element
)。
我明白? extends Element
不是Element
。我的问题是:我可以用不同的方式表达我的想法吗?或者我只是在这种情况下错过了泛型的想法?