Ich habe zwei Methoden wie die folgenden
%Vor%Meine Katzen- und Hundeklasse sind wie folgt
%Vor%Um Redundanz zu vermeiden, wollte ich die beiden obigen Methoden in eine einzige generische Methode konvertieren.
Ich habe Folgendes versucht
%Vor% Aber es funktioniert nicht, da es beschwert, dass das generische T nicht getName
oder getId
Hier sind Cat
und Dog
eingebaute Java-Klassen. Als Ergebnis führe ich CAN NOT Vererbung aus und stelle eine Superklasse Animal
für sie mit name
und id
als Datenvariablen zur Verfügung.
Gibt es eine Möglichkeit, die beiden obigen Methoden zusammenzuführen, ohne die Vererbung zu implementieren?
Eine andere Möglichkeit: Wenn Sie Java 8 verwenden, könnten Sie die Getter-Methoden für Name und ID als zusätzliche Parameter in die Methode einbinden. Dies ist typsicher und erfordert weder Reflektion noch Änderungen an den ursprünglichen Klassen.
%Vor%Oder kürzer, mit Streams:
%Vor%Verwendung:
%Vor%Natürlich ist der body der Methode in allen Fällen derselbe, aber Sie müssen auf verschiedene Arten aufrufen, abhängig von der Eingabe. Dazu könnten Sie eine Eingabemethode bereitstellen, die andere Methode in der entsprechenden Weise aufrufen oder eine Ausnahme auslösen, falls der Typ falsch ist.
%Vor% Sie müssen eine gemeinsame Schnittstelle für Cat
und Dog
definieren, zum Beispiel Animal
.
Dann können Sie einen List<Animal>
als Parameter übergeben.
Können Sie nur eine Schnittstelle für Hund und Katze herstellen?
%Vor%dann würde Ihre Methode
werden %Vor%In Bezug auf die eingebaute Klasse, die Sie erwähnt haben, können Sie sie in eine andere Klasse einfügen und implementieren die Schnittstelle (oder Superklasse), die das gewünschte Verhalten beschreibt.
Ich musste einmal die gleiche Schnittstelle für log4j
und logback
event Object bereitstellen, sie sind definitiv sehr unterschiedlich.
Hier geht der Wrapper ..
%Vor%Und die Kindklasse, die die eingebaute Klasse enthält
%Vor%Die LogbackEvent-Klasse ist der Log4jEvent-Klasse sehr ähnlich, und in anderen Teilen des Codes gibt es viele Methoden, die den Argumenttyp von EventWrapper erhalten. Vielleicht würde dieser Fall Ihnen helfen, Ihre Lösung zu entwickeln.
Die einfachste Lösung, die ich mir vorstellen kann (die Vererbung beiseite zu lassen), ist zu überprüfen, ob das Objekt vom Typ Hund oder Katze ist. Es folgt der Code für die Methode: -
%Vor%Es verwendet jedoch keine Generika.
Tags und Links java