Ich habe zwei Schnittstellen in Java (Version 8), die sehr ähnlich sind. Ich kann die Schnittstellen nicht ändern und kann die Klassen, die sie implementieren, nicht ändern.
public interface A {
int get();
}
public interface B {
int get();
int somethingelse();
}
Jetzt habe ich eine Funktion, deren Implementierung (fast) auf beide Schnittstellen passt. Ich möchte, dass es so etwas macht:
public int foo((A | B) p) {
int ret = 0;
if (p instanceof B) {
ret = p.somthingelse();
}
return ret + p.get();
}
Ich möchte keine Inspektion verwenden, da sich diese Funktion in der Hauptpipeline meines Programms befindet. Ich möchte, dass es eine gute Leistung hat. Ist das in Java möglich?
Bearbeiten:
Eine einfache Lösung besteht darin, foo()
sie für jede Schnittstelle anders zu kopieren / einzufügen und zu implementieren. Aber in Wirklichkeit sind foo()
die Schnittstellen viel länger und ich versuche, Codeduplikationen zu vermeiden.
get()
gemeinsam. Dies ist natürlich ein vereinfachtes Beispiel. In Wirklichkeit haben sie mehr Funktionen gemeinsam.
public
Accessor ist für Schnittstellenmethoden redundant. Und meintest du instanceof
statt implements
?