Visitor パターンとジェネリックに問題があります。私は、子供たちが訪問される抽象クラスをいくつか持っています。このコードを見てください:
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
タイプのメソッド visit ( ) はVisitor<capture#1-of ? extends Element>
、引数 ( ) には適用されませんElement
。
? extends Element
ではないことは理解していElement
ます。私の質問は、私の考えを別の方法で表現できますか? または、この場合、ジェネリックのアイデアを見逃しただけですか?