Ich beginne nach einigen Projekten in C# und C++ mit Java zu arbeiten. Besucher Schnittstellen wie diese entwerfenWie man Probleme mit der Typlöschung für die Besucherimplementierung löst
Ich wollte:
public interface ActionVisitor<A> {
void visitAction(A action);
}
public interface MySmallActionVisitor
extends ActionVisitor<ActionA>,
ActionVisitor<ActionB>
{
}
public interface MyFullActionVisitor
extends ActionVisitor<ActionA>,
ActionVisitor<ActionB>,ActionVisitor<ActionC>,ActionVisitor<ActionD> //....
{
}
Natürlich ist diese Löschung wegen Art nicht funktioniert. (Der Grund, warum ich so etwas wie dies wollen, ist, dass ich verschiedene Besucher Schnittstellen für verschiedene Gruppen von Aktionen haben, die besucht werden können.)
Die einzige Lösung, die mir in den Sinn kommt, ist Schnittstellen zu erklären
public interface ActionAVisitor {
void visitAction(ActionA action);
}
public interface ActionBVisitor {
void visitAction(ActionB action);
}
//...
und dann
public interface MySmallActionVisitor
extends ActionAVisitor, ActionBVisitor
{
}
Dies würde funktionieren, aber ich würde die Erklärung aller ActionXVisitor-Interfaces nicht wie die dumme Wiederholung und viele Dateien ist ...
Haben Sie Ideen, wie Sie das besser machen können?
Vielen Dank!
meinen Sie mit "instanceof"? Das möchte das Besuchermuster vermeiden. Außerdem müsste ich diese Blöcke in jedem Besucher schreiben (MySmallVisitor, MyFullVisitor und andere). – Philipp
ja, ich meinte instanceof. Der Versuch, dies zu vermeiden, wird am Ende wahrscheinlich zu viel mehr Code führen. –
Wenn es wirklich keine Möglichkeit gibt, das Problem zu lösen, beschreibe ich, dass ich lieber mehr Code als instanceof code hätte ... Schlechte Sprache :-( – Philipp