Mit generischen Methoden als Alternative zum Überladen?

8

Überladung ist in Ordnung. Aber wenn wir bedenken, dass wir haben zwei Objekte ObjectA und objectB. Beide haben "ID" und "Name" Variable. Ich möchte eine Methode (in der dritten Klasse) schreiben, die den Namen des gegebenen Objekts zurückgibt. Wenn ich überladene Funktionen schreibe, wiederhole ich den Code. Ist es eine gute Übung? Wäre es nicht besser, stattdessen generische Funktionen zu verwenden?

Also, ich weiß, dass ich eine überladene Funktion schreiben kann, etw. so:

%Vor%

Und es funktioniert gut. Aber beide Funktionen sind identisch! Der einzige Unterschied ist die Tatsache, dass sie ein Argument des anderen Typs brauchen. Weil sie gleich aussehen, verstößt sie nicht gegen die DRY-Regel? Ich habe versucht, eine einfache generische Methode zu schreiben, aber die IDE markiert that.getId und that.name () als Fehler und empfiehlt, sie als ((ObjectA) that) .getId () oder ((ObjectB) that) .getId () zu interpretieren. . Habe ich es nicht in der Zeile "T das = clazz.cast (o)" gemacht? Was mache ich falsch?

%Vor%

Generell würde ich gerne wissen, ob meine Idee möglich ist. Wie kann ich meinen Fehler beheben? Und was ist mehr, ist es eine gute Idee? Oder ist es besser einfach überladene Funktionen zu schreiben?

    
Thamiar 21.08.2015, 12:06
quelle

2 Antworten

22

Beide Ideen sind schlecht. Ihre Klassen ObjectA und ObjectB sollten eine gemeinsame Schnittstelle implementieren, die die Methoden getId() und getName() definiert.

Dann können Sie mit einer einzigen Methode davonkommen:

%Vor%     
Kayaman 21.08.2015, 12:09
quelle
18

Ihr Fall ist ein guter Kandidat für die Programmierung zu Interface. Erstellen Sie eine Schnittstelle und verschieben Sie gängige Methoden.

%Vor%     
quelle

Tags und Links