Anders als in anderen Sprachen kann man in Java leider nur einen Wert zurückgeben. Mir geht es hier um eine grundsätzliche Auseinandersetzung mit diesem Problem, ohne ein konkretes Problem zu haben.
Wenn man nun mehrere Rückgabewerte braucht, gibt es folgende Möglichkeiten, die ich sehe:
1) Mehrfachabarbeitung des Methodeninhalts, jedes mal wird ein anderer der benötigten Werte zurückgegeben
Nachteile:
- Codeduplizierung
- Laufzeiteinbußen
- Nicht immer ist der Inhalt der Methode mehrfach anwendbar, ohne das Ergebnis zu verfälschen
Fazit: Nicht sinnvoll einsetzbar.
2) Auslagern der Methode in eine eigene Klasse, das Klassenobjekt kann nach der Ausführung nach den unterschiedlichen Ergebnissen befragt werden.
Nachteile:
- U.U. müssen der Klasse zur Ausführung der Methode viele, viele Daten übergeben werden, die eigentlich in der ursprünglichen Klasse vorgehalten werden.
- Zusammengehöriges wird u.U. auseinander gerissen (gehört die Methode thematisch eher nicht zur Klasse, in der sie sich im Moment befindet, ist das hingegen ein gangbarer und vielleicht sinnvoller Weg).
Fazit: Nur sinnvoll, wenn man thematisch nicht zusammengehöriges damit entheddert.
3) Bilden einer Liste der Rückgabewerte.
Nachteile:
- Die Information welcher Wert an welcher Stelle steht ist entweder mit benannten Konstanten zu belegen oder die Indices stehen hart kodiert im Code.
- Die Lesbarkeit und Wartbarkeit des Codes leidet.
- Bei Rückgabewerten mit unterschiedlichen Typen müsste man eine List<Object> nehmen und nicht nur die Indices ständen überraschend da, auch "wilde" Casts.
Fazit: Eigentlich eher hässlich.
4) Bilden eines ziemlich leeren Objekts (ich glaube sowas nennt man auch Bean), das nur die Rückgabewerte enthält und sich nach diesen befragen lässt. und Übergabe dieses Objekts.
Nachteile:
- Eine eigentlich ziemlich nutzlose Klasse wird nur zur Rückgabe der Werte gebraucht.
- Der Code wird dadurch auch nicht gerade übersichtlicher, falls sowas öfter vorkommt.
Ich habe bisher Methode 4 verwendet, etwa um ein Matching-Result zurückzugeben. Freundlicher Weise ist in dem Fall die "kleine, nutzlose" Klasse schon eingebaut und man muss sie nicht selbst anlegen.
Wie geht ihr hierbei vor? Gibt es einen weitere Weg? Welcher ist der Java-Königsweg?
Wenn man nun mehrere Rückgabewerte braucht, gibt es folgende Möglichkeiten, die ich sehe:
1) Mehrfachabarbeitung des Methodeninhalts, jedes mal wird ein anderer der benötigten Werte zurückgegeben
Nachteile:
- Codeduplizierung
- Laufzeiteinbußen
- Nicht immer ist der Inhalt der Methode mehrfach anwendbar, ohne das Ergebnis zu verfälschen
Fazit: Nicht sinnvoll einsetzbar.
2) Auslagern der Methode in eine eigene Klasse, das Klassenobjekt kann nach der Ausführung nach den unterschiedlichen Ergebnissen befragt werden.
Nachteile:
- U.U. müssen der Klasse zur Ausführung der Methode viele, viele Daten übergeben werden, die eigentlich in der ursprünglichen Klasse vorgehalten werden.
- Zusammengehöriges wird u.U. auseinander gerissen (gehört die Methode thematisch eher nicht zur Klasse, in der sie sich im Moment befindet, ist das hingegen ein gangbarer und vielleicht sinnvoller Weg).
Fazit: Nur sinnvoll, wenn man thematisch nicht zusammengehöriges damit entheddert.
3) Bilden einer Liste der Rückgabewerte.
Nachteile:
- Die Information welcher Wert an welcher Stelle steht ist entweder mit benannten Konstanten zu belegen oder die Indices stehen hart kodiert im Code.
- Die Lesbarkeit und Wartbarkeit des Codes leidet.
- Bei Rückgabewerten mit unterschiedlichen Typen müsste man eine List<Object> nehmen und nicht nur die Indices ständen überraschend da, auch "wilde" Casts.
Fazit: Eigentlich eher hässlich.
4) Bilden eines ziemlich leeren Objekts (ich glaube sowas nennt man auch Bean), das nur die Rückgabewerte enthält und sich nach diesen befragen lässt. und Übergabe dieses Objekts.
Nachteile:
- Eine eigentlich ziemlich nutzlose Klasse wird nur zur Rückgabe der Werte gebraucht.
- Der Code wird dadurch auch nicht gerade übersichtlicher, falls sowas öfter vorkommt.
Ich habe bisher Methode 4 verwendet, etwa um ein Matching-Result zurückzugeben. Freundlicher Weise ist in dem Fall die "kleine, nutzlose" Klasse schon eingebaut und man muss sie nicht selbst anlegen.
Wie geht ihr hierbei vor? Gibt es einen weitere Weg? Welcher ist der Java-Königsweg?
Zuletzt bearbeitet: