我遇到了访问者模式和泛型的问题。我有一些抽象类要访问其孩子。看看这段代码:
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。我的问题是:我可以用不同的方式表达我的想法吗?或者我只是在这种情况下错过了泛型的想法?