の間、私はこのように、Visitorパターンを開発しています:もちろんConfigA
とConfigB
のAbstractConfig
を拡張する場合は、多型は、親と子のクラス
@Component
public class ConcreteVisitor extends AbstractVisitor {
public void visit(ConfigA config) {
// Do something
}
public void visit(ConfigB config) {
// Do something
}
}
によって継承され
public abstract class AbstractVisitor {
public void visit(AbstractConfig config) {
throw new NotImplementedException();
}
}
。
が、私はこのようにそれをオートワイヤリングによりConcreteVisitor
のBeanインスタンスを使用します。
@Autowired
private AbstractVisitor visitor;
問題がある、私はconfig
がConfigA
のインスタンスであるvisitor.visit(config)
を呼び出すとき、それはNotImplementedExceptionを発生させます。
今、可能なすべての抽象メソッドをAbstractVisitor
に宣言しましたが、別の好ましい解決策がありますか?つまり、具体的な訪問者は、親の抽象メソッドの引数に多相的なメソッドを定義できます。
ありがとうございます。
はこの置き換えます。public void訪問(AbstractConfigの設定){ スロー新しいNotImplementedExceptionを(); }の場合:public void visit(AbstractConfig config);あなたのautowiringワイヤが正しいクラス – Stultuske
@ Stultuskeの実装であることを確認してください、あなたのコメントをありがとうございますが、それでも動作しない、エラーを発生させます。 – tsuda7
これはまた、@ @オーバーライドが重要な理由の1つです。これは、あなたがメソッドをオーバーライドしたと思っているが、実際には返信していないと思っているような問題からあなたを救います。 –