【发布时间】:2012-08-24 12:47:35
【问题描述】:
我遇到了访问者模式和泛型的问题。我有一些抽象类要访问其孩子。看这段代码:
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)
但现在我收到错误消息:
Visitor<capture#1-of ? extends Element>类型中的方法访问 (capture#1-of ? extends Element) 不适用于参数 (Element)。
我了解? extends Element 不是Element。我的问题是:我可以用不同的方式表达我的想法吗?或者我只是在这种情况下错过了泛型的想法?
【问题讨论】:
-
这是编译器错误还是运行时错误?
-
@RomanC 这绝对是编译时错误。
标签: java generics visitor-pattern