ich mit dem Besucher-Muster bin zu entwickeln, wie folgt aus:Polymorphismus zwischen einem Elternteil und einem Kind Klasse
public abstract class AbstractVisitor {
public void visit(AbstractConfig config) {
throw new NotImplementedException();
}
}
, die von
@Component
public class ConcreteVisitor extends AbstractVisitor {
public void visit(ConfigA config) {
// Do something
}
public void visit(ConfigB config) {
// Do something
}
}
vererbt Wo, natürlich ConfigA
und ConfigB
AbstractConfig
verlängern .
ich die Bean-Instanz von ConcreteVisitor
verwenden, indem Sie es wie folgt autowiring:
@Autowired
private AbstractVisitor visitor;
Das Problem ist, wenn ich visitor.visit(config)
nennen, wo config
eine Instanz von ConfigA
ist, wirft es ein NotImplementedException.
Jetzt habe ich alle möglichen abstrakten Methoden in AbstractVisitor
erklärt, aber gibt es noch eine andere bevorzugte Lösung? Ich meine, ein konkreter Besucher kann beliebige polymorphe Methoden zum Argument der abstrakten Methode der Eltern definieren.
Vielen Dank im Voraus.
ersetzen diese: public void Besuch (AbstractConfig config) { throw new NotImplementedException(); } mit: public void visit (AbstractConfig config); und stellen Sie sicher, dass Ihr Autowiring Drähte eine Implementierung der richtigen Klasse – Stultuske
@Stultuske, danke für Ihren Kommentar, aber das hat nicht funktioniert, immer noch den Fehler ausgelöst. – tsuda7
Das ist auch einer der Gründe, warum '@ Override' wichtig ist: Es rettet dich vor einem Problem wie dem, dass du dachtest, du hättest eine Methode außer Kraft gesetzt, aber nicht –