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ます。私の質問は、私の考えを別の方法で表現できますか? または、この場合、ジェネリックのアイデアを見逃しただけですか?