Wie funktionieren Hilfsmethoden in Java, in welche Klassen macht man die und wie ruft man die in main auf?

2 Antworten

Meinst du statische Utility-Funktionen (habe das Wort "Hilfsmethode" noch nie geört)?

Wenn du solche meinst, kommt es darauf an, wie weitreichend die sind.

Wenn es nur ein paar wenige sehr spezielle sind, die nur innerhalb einer bestimmten Klasse benötigt werden und die Implementierung nicht allzu sperrig ist, mache ich sie meistens als private oder protected mit in die Klasse rein, wo wie benötigt werden.

Das hat den Vorteil, dass sie von außen unsichtbar sind.

Wenn ich sie an mehreren Stellen verteilt im Programm brauche, mache ich eine eigene xxxUtils-Klasse, die einen privaten Constructor besitzt (damit sie nicht instanziert wird) und außer den statischen Methoden nichts weiter besitzt. Solche Klassen sollten stets zustandslos sein.

Beachte aber, dass solche Utility-Funktionen immer nur eine einzige kleine Aufgabe ausführen sollten, die mit der Logik der Klasse nicht zu viel zutun hat (z.B. etwas bestimmtes mit einem String machen).

Wenn größere Prozeduren durchgeführt werden sollen, solltest du dir überlegen, ob man das nicht mit einer "normalen" Klasse besser lösen kann (z.B. ein Builder, der durch Aufrufen mehrerer Methoden ein ganz bestimmtes Objekt "zusammenbaut" und am Ende zurückgibt.)

Wenn du am Ende mehr Utility-Methoden als "normale" Methoden hast, hast du was falsch gemacht :)

Woher ich das weiß:Hobby

Naja, die Methoden kannst du direkt in deiner Klasse erstellen. Oder du erstellst eine Hilfsklasse und greifst darüber auf deine Methoden zu, nach dem du ein Objekt deiner Hilfsklassen erstellt hast.

public class MyClass {
  static int addiere(int z1, int z2) {
    return z1 + z2;
  }
   
  public static void main(String args[]) {
   int x=10;
   int y=25;
   int summe = addiere(x,y);
   System.out.println("Sum of x+y = " + summe);
  }
}

In dem Fall wäre addiere() deine Hilfsmethode.


MrAmazing2  08.12.2021, 03:35
nach dem du ein Objekt deiner Hilfsklassen erstellt hast

Oder man macht die Methoden static

0
GuteAntwort2021  08.12.2021, 11:47
@MrAmazing2

Wenn man kein Objekt erzeugen möchte... Aber wieso sollte man die Methoden in eine "Hilfsklasse" auslagern, wenn man keine Instanz davon zum Arbeiten haben möchte? Führt Objektorientierung ad absurdum mMn.

Das ist so, als ob man sich ein Schnurlostelefon kauft und trotzdem die ganze Zeit an der Station stehen bleibt.

0
MrAmazing2  08.12.2021, 15:04
@GuteAntwort2021

Also ich mache meine Hilfsmethoden immer static, da sie eigentlich nie auf irgendwelche Felder der Klasse angewiesen sind. Sie sind Stateless, einfach gesagt.

Und stateless bedeutet für mich static.

Math.pow(), Math.min(), Math.signum(), etc. sind ja auch alles Hilfsfunktionen. Und alle static. Kannst ja mal die Java Devs fragen warum sie die static gemacht haben ;)

0
GuteAntwort2021  08.12.2021, 15:48
@MrAmazing2

Gute Frage, aber wenn du zum Beispiel mit Math.random() arbeitest, erzeugt die Klasse Math meines Wissens nach eine Instanz zu java.util.Random und generiert darüber dann seine Zufallszahlen.

Im Grunde erzeugt dann deine Hilfsklasse das Objekt. Ist das sinnvoll, statt selbst ein Random Objekt innerhalb deiner Klasse zu erzeugen und damit zu arbeiten? Zumal du mit jedem Aufruf dann ein neues Objekt von Random erzeugst und nach dem return wandert es wieder in den Mülleimer.

Sinnvoll? Das überlasse ich jedem selbst zu entscheiden. ;-)

0