Java Gleichnamige Methode mit !fast! immer gleichen Parametern in mehreren Klassen

  • Ersteller Ersteller Tersus
  • Erstellt am Erstellt am
T

Tersus

Gast
Guten Abend,

dämliche Frage, die ich derzeit selbst mit einem Nein beantworte. Ich habe in mehreren Klassen eine immer wiederkehrende Methode, in der jedoch "nur" die ersten 3 Parameter pro Klasse gleich sind.

Code:
doSomething(param A, param B, param C, ...)

KlasseA.doSomething(param A, param B, param C, param D)
KlasseB.doSomething(param A, param B, param C, param E, param F)
KlasseC.doSomething(param A, param B, param C, param G, param H)
...
Parameter A bis C sind für jede Klasse gleich.

Dass ich hierfür kein Interface nehmen kann, ist mir klar, da die Methoden stets eine andere Signatur aufweisen und über ein Interface möchte ich die Klassen auch gar nicht ansprechen, denn sie sind zumindest dafür zu speziell.
Mir fehlt nur die Lust, für jede dieser Klassen, immer wieder die Methode mit fast gleichen Parametern und identischer JavaDoc in Bezug auf die ersten 3 Parameter hin zuschreiben.

Gibt es da irgendeine Lösung oder einen Trick?


Grüße

PS: Nein, ich kann die Methoden nicht aufteilen oder Parameter auslagern. Es muss leider eine Methode sein, in der sich alle Parameter befinden.
 
Leider nicht, Java unterstützt keine Default-Parameter und daher ist es häufig schon sinnvoll, die Default Parameter per Copy&Paste zu erzeugen.
 
Hi,

so richtig nachvollziehen konnte ich das Problem nicht, ausser das du ggf. zuviele Parameter pro Methode reinpacken willst und eher anderer Stelle optimieren kannst(anhand der gegebenen Informationen aber nicht möglich).

Wenn die Klassen inhaltlich zusammen hängen hört sich tendentiell danach an, als ob du eine Allgemeine/Abstrakte Klasse bauen solltest mit der Methode "doSomething(param A, param B, param C, ...)" und alle jetzigen Klassen davon erben. Das wäre die Option dafür, das alle abgeleiteten Klassen eine eigene Implementierung der Methode machen. Wenn du diese in der Allgemeinen Klasse nicht abstrakt machst und fertig implementierst, dann koennen auch alle anderen genau diese Methode ausführen(sofern das eben gewollt ist).

Vielleicht ist es aber auch sinnvoll die 3 immer gleichen Parameter in ein eigenes kleines Modell(Klasse) packen. Ob das generisch ist/sein soll um auch die anderen weiteren Parameter zu enthalten kann ich anhand des Beispiels nicht beurteilen. Zumindest wären dann immer die 3(dann ein Parameter) pro Klasse gleich.


Gruß
 
TimGod schrieb:
Wenn die Klassen inhaltlich zusammen hängen hört sich tendentiell danach an, als ob du eine Allgemeine/Abstrakte Klasse bauen solltest mit der Methode "doSomething(param A, param B, param C, ...)" und alle jetzigen Klassen davon erben. Das wäre die Option dafür, das alle abgeleiteten Klassen eine eigene Implementierung der Methode machen. Wenn du diese in der Allgemeinen Klasse nicht abstrakt machst und fertig implementierst, dann koennen auch alle anderen genau diese Methode ausführen(sofern das eben gewollt ist)

Das wäre naheliegend, aber das hat er explizit ausgeschlossen.
 
Es wäre zumin. hilfreich zu wissen ob die Parameter den selben Typen haben, wenn ja, könnte er mit einem Array(List) oder sogar einer eigenen Klasse auf einen Parameter reduzieren.
 
Zu einem Wrapper zusammenfassen

Beispiel:
Code:
void myMethod(int age, String firstName, String name);
wird zu:
Code:
void myMethod(Person person);

Code:
class Person{
 int age;
 String firstName;
 String name;
}
 
Vielleicht kannst du das hier irgendwie verwerten?

Code:
public abstract class AbstractClass {

    protected void myAbstractMethod(String s1, String s2, String s3) {
        // does stuff
    };
}

Code:
public class ClassImplementationOne extends AbstractClass {
    
    public void myMethod(String s1, String s2, String s3, double d) {
        myAbstractMethod(s1, s2, s3);
        d++;
    }
}

Code:
public class ClassImplementationTwo extends AbstractClass {
    
    public void myMethod(String s1, String s2, String s3, int i) {
        myAbstractMethod(s1, s2, s3);
        i++;
    }
}
 
Zurück
Oben