Methoden Methoden mit mehreren Rückgabewerten

Crian

Top Contributor
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?
 
Zuletzt bearbeitet:

nrg

Top Contributor
ohne jetzt alles von dir gelesen zu haben, würde ich darauf einfach mal antworten, dass mehrere returns irgendwie ja mit einander im zusammenhang stehen. also würde ich diese einfach in einer klasse abbilden und ein objekt dieser klasse zurückgeben
 
S

SlaterB

Gast
wie sähe denn die Wuschlösung aus, wie ist es in anderen Sprachen besser gelöst?

4)
mit Generics kann die Anzahl der Klassen einsparen, braucht evtl. nur eine pro Anzahl Parameter,
mehrere solcher Klassen sind schnell kopiert, all diese Klassen können in einer Datei irgendwo im util-Package versteckt werden,
evtl. zusammen mit weiteren uninteressanten halb-automatisch erzeugten Arbeitsklassen,
durch die Klassendefinitionen muss der normale Code also nicht gestört werden falls man nicht explizit einzelne möchte

wenn in anderen Sprachen alles über Syntax gelöst ist, die man lernen müsste,
kann man das als Ausrede nehmen die Klasse möglichst kurz zu benennen und z.B. direkt mit Attributen statt über getter zu arbeiten

sieht dann vielleicht so aus:
Java:
import util.T;

public class Test {

    public static void main(String[] args)  {
        T2<String, Integer> e = findXy();
        String k = e.v1;
        Integer x = e.v2;
    }

    public static T2<String, Integer> findXy()  {
        String k = ..;
        Integer x = ..;
        return T2.c(k, x);
    }
}
 

Volvagia

Top Contributor
Bei mir ist es von Mal zu Mal unterschiedlich. Wenn ich einen Pfad errechne, gebe ich endweder eine List mit Point-Instanzen zurück (wenns sehr simple ist) oder eine eigene Path-Klasse. Wenn ich eine Spalte einer Datenbank zurückgebe eine List oder ein Array. Bei 2D ein 2D-Array, wenn es sich um den selben Typ handelt, sonst eine List/Array einer eigenen Klasse. Sich auf einen "Königsweg" festzulegen nimmt einen imho die Flexiblität, die man bei unterschiedlichen Lösungen braucht.

(Oder wie zufällig gerade in HMWDH läuft: "Wir dürfen nicht jedesmal aufs neue so handeln, wie wir es immer schon getan haben, sonst bleiben wir stecken im Sumpf der Gewohnheit.")
 

Crian

Top Contributor
Danke, die Idee mit den Generics und die Hilfsklassen in ein eigenes Paket zu verfrachten gefällt mir.
Und sicher sollte man sich nicht auf einen Weg versteifen. Es hätte ja nur sein können, dass es noch einen ganz anderen Weg gibt, der mir nicht in den Sinn kam.
 

schalentier

Gesperrter Benutzer
wie sähe denn die Wuschlösung aus, wie ist es in anderen Sprachen besser gelöst?
Ruby:
Code:
def find_xy
   return x, y
end

def main
  x, y = find_xy
end

Mit Java loes ich sowas meistens mit ner Mini-Klasse mit public Feldern, die meistens auch ne Innerclass ist:
Java:
public class ReturnValue {
   public int x;
   public int y;
}
 

Crian

Top Contributor
Ok, das ist tatsächlich noch eine weitere Möglichkeit. Wobei ich da wohl eine Klasse mit privaten Variablen, einem Konstruktor und Gettern vorziehen würde. Aber das kann man ja mal im Hinterkopf behalten.
 

Andi_CH

Top Contributor
Anders als in anderen Sprachen kann man in Java leider nur einen Wert zurückgeben.

In welcher Sprache ist das denn möglich? Und wie?

Wie haben recrods verwendet - heute verwendet man halt Objekte, aber das wurde ja schon gesagt.
Das ist faktisch auch nicht viel anders als ein Record - eine geeignete Datenstruktur die alle Werte beeinhaltet.
 

Andi_CH

Top Contributor
... das kommt davon wenn man viel zu langsam tippt ;-) mea culpa.
(Seltsam ist nur, dass ich trotz weitreichender Ausbildungen Ruby noch nie begegnet bin - muss etwas eher exotisches sein -> 1)

und zur Datenhaltungsklasse: Da ist es fraglich ob ein Konstruktor, sowie getter und setter sinnvoll sind. Das ist so etwa das Einzige Beispiel, bei dem unter gewissen Voraussetzungen darauf verzichte und direkt auf die Member zugreife. -> 2

--
Moooomentchen bevor ich jetzt gelyncht werde:
1 - exotisch muss nicht == schlecht heissen
2 - ich habe betont: unter gewissen Bedingungen
:D
 

Crian

Top Contributor
Ruby kann ich zwar nicht, aber ich kenne es. Ich bezog mich da auf Perl, wobei das wohl in beiden Fällen eher eine elegante Weise ist, die Rückgabewerte wieder aus der Liste herauszuholen. Ist vermutlich nur Syntax.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
U Funktionale Interfaces mit mehreren abstrakten Methoden? Java Basics - Anfänger-Themen 8
C Problem mit mehreren Methoden + Scanner Java Basics - Anfänger-Themen 5
CptK Interface Functional interface mit mehreren Methoden Java Basics - Anfänger-Themen 6
P Objekt in mehreren Methoden verwenden. Java Basics - Anfänger-Themen 3
M JUnit Testmethoden mit mehreren assert Methoden Java Basics - Anfänger-Themen 1
K Vererbung Methoden in klassen auslagern und in mehreren Klassen verfügbar machen Java Basics - Anfänger-Themen 8
emreiu Methoden Rekursive Methoden Runter- & Hochzählen Java Basics - Anfänger-Themen 2
MoxMorris Einige Methoden aus verschiedenen Klassen nacheinander auszuführen läuft seltsam Java Basics - Anfänger-Themen 2
J Argumente in Methoden übergeben Java Basics - Anfänger-Themen 1
XWing Methoden rückgabe Problem? Java Basics - Anfänger-Themen 6
Say Class scope und Instance scope und Getter nur selbstgeschrieben Methoden Java Basics - Anfänger-Themen 11
I Gleiche Klassen und Methoden in unterschiedlichen Projekten nutzen Java Basics - Anfänger-Themen 2
N Klassen Methoden anderer Klassen aufrufen Java Basics - Anfänger-Themen 4
Renjiroo Java Bmi Rechner mit Methoden Java Basics - Anfänger-Themen 4
frager2345 Thread - Methoden synchronized deklarieren Java Basics - Anfänger-Themen 10
M Designentscheidung von Attributen/Methoden im Falle von Vererbung Java Basics - Anfänger-Themen 8
berserkerdq2 Findet eine parallele Verarbeitung in Java bei Threads erst statt, wenn man die Methoden auch synchronized? Und wie sieht bei Conditions aus? Java Basics - Anfänger-Themen 8
Alen123 Erstes Arbeiten mit Methoden. Java Basics - Anfänger-Themen 5
berserkerdq2 Zwei Klassen Erben von der Klasse A, die eine Klasse kann ich an Methoden übergeben, die als Parameter A haben, die andere nicht? Java Basics - Anfänger-Themen 3
M Andere Methoden in anderen Klassen aufrufen Java Basics - Anfänger-Themen 11
L Methoden in anderen Klassen nutzen Java Basics - Anfänger-Themen 6
D Gerade oder ungerade Zahl mittels Methoden Java Basics - Anfänger-Themen 13
M Erklärung von Ausnahmebehandlung in Methoden Java Basics - Anfänger-Themen 13
S Methoden 2 non-static Methoden, trotzdem Fehler "non static method can not be referenced from a static context" Java Basics - Anfänger-Themen 9
L Rekursive Methoden Java Basics - Anfänger-Themen 14
X Wie erreiche ich, dass ein Robot weitere Attribute hat, die nicht materialisiert sind, sondern nur über get/ set-Methoden simuliert sind? Java Basics - Anfänger-Themen 1
R Frage zu Methoden (Rückgabewert u. ohne.) Java Basics - Anfänger-Themen 2
W Verschiedene Methoden in einer Klasse in der Main aufrufen? Java Basics - Anfänger-Themen 8
W Methoden aufrufen - auch klassenübergreifend? Java Basics - Anfänger-Themen 9
Kotelettklopfer Methoden nicht aufrufbar Java Basics - Anfänger-Themen 34
R Schulaufgabe, Bruache Hilfe mit non-static Methoden Java Basics - Anfänger-Themen 2
S Vererbung Abstrakte Methoden: Wozu das Ganze?! Java Basics - Anfänger-Themen 7
S abstrakte methoden in subclass? Java Basics - Anfänger-Themen 7
S Methoden - Warum int wenn auch void? Java Basics - Anfänger-Themen 3
H Kann man Methoden öfter aufrufen? Java Basics - Anfänger-Themen 2
M Aufruf von statischen Methoden einer anderen Klasse Java Basics - Anfänger-Themen 15
lougoldi Verkettung von Methoden und Konstruktoren Java Basics - Anfänger-Themen 4
Zeppi OOP Methoden mit einander Verknüpfen Java Basics - Anfänger-Themen 6
A Löschen von Leerzeichen in einem char array ohne methoden Java Basics - Anfänger-Themen 6
A Parametar übergabe zwischen Methoden Java Basics - Anfänger-Themen 26
D Methoden nach einer bestimmten Reihenfolge ausführen. Java Basics - Anfänger-Themen 20
P Wie rufe ich Methoden mit einer Referenz auf eine Klasse||Objekt auf Java Basics - Anfänger-Themen 4
O Attribute die Methoden zählen Java Basics - Anfänger-Themen 5
M Bräuchte Hilfe bei diesen Methoden Java Basics - Anfänger-Themen 4
G Methoden Methoden mit versch. Datentypen Java Basics - Anfänger-Themen 1
T Ich habe eine Variabel die nicht Methoden übergreifend ist. Kann mir jemand Helfen :) Java Basics - Anfänger-Themen 5
Junger_Basileus Celsius -> Fahrenheit / Strukturierung in statischen Methoden Java Basics - Anfänger-Themen 7
J Verschachtelte Methoden Java Basics - Anfänger-Themen 9
H Methoden in anderen Methoden aufrufen Java Basics - Anfänger-Themen 6
Kawastori Hilfe bei Methoden Übung Java Basics - Anfänger-Themen 6
veryck Methoden Rekursive Methoden mit Rückgabeparameter Java Basics - Anfänger-Themen 9
C Methoden können nicht auf Instanzvariable der Klasse zugreifen Java Basics - Anfänger-Themen 3
P Methoden aufrufen - Fehler Java Basics - Anfänger-Themen 20
M konzeptuelle Frage: In welcher Klasse definiert man am Besten Methoden, die die Kommunikation mit dem User regeln? Java Basics - Anfänger-Themen 8
C eigene Methoden erstellen (Instanzmethoden) Java Basics - Anfänger-Themen 7
P Klasse hat keinen Zugriff auf getter/setter-Methoden eines Objektes Java Basics - Anfänger-Themen 9
B Methoden Methoden haben kein Zugriff auf variablen Java Basics - Anfänger-Themen 4
M Gettter/Setter Methoden Klassenfelder kapselung und zugriff? Java Basics - Anfänger-Themen 1
C Fernseher-Aufgabe (Methoden, Klassen und Objekte) Java Basics - Anfänger-Themen 63
C Taschenrechner (switch) in Taschenrechner mit Methoden umwandeln Java Basics - Anfänger-Themen 115
H Methoden in großen Klassen gruppieren oder auslagern? Java Basics - Anfänger-Themen 10
G Generics Methoden Java Basics - Anfänger-Themen 7
L Test-Methoden schreiben Java Basics - Anfänger-Themen 13
S throws bei Methoden Java Basics - Anfänger-Themen 4
L Best Practice Code Refactoring für Methoden mit fast gleicher Aufbau Java Basics - Anfänger-Themen 6
I Greedy Methode Methoden nutzen Java Basics - Anfänger-Themen 3
C Methoden-Parameter ist Interface Java Basics - Anfänger-Themen 5
A Klassen und methoden Java Basics - Anfänger-Themen 15
S Übergabe von Arrays an Methoden Java Basics - Anfänger-Themen 20
L Methoden Wie Löse ich ext Methoden Aufruf Fehler? Java Basics - Anfänger-Themen 3
A Bankweverwaltung mit Klassen und Methoden Java Basics - Anfänger-Themen 14
B Methoden Ausgeben Aufgabe Java Basics - Anfänger-Themen 15
M Aufsplitten von Methoden in andere Klassen Java Basics - Anfänger-Themen 2
T Methoden Verständnis Java Basics - Anfänger-Themen 14
M Feste Reihenfolge von dem Ablauf von Methoden Java Basics - Anfänger-Themen 7
G Java Abstrakte Methoden Java Basics - Anfänger-Themen 2
N Klassen Warum kann meine Klasse nicht auf Methoden der anderen Klasse zugreifen? Java Basics - Anfänger-Themen 6
Ich lerne Java. Methoden Mehrere Methoden mit Punkt Java Basics - Anfänger-Themen 45
Kirby.exe Methoden Aufrufe Java Basics - Anfänger-Themen 4
G Objekte in Methoden? Java Basics - Anfänger-Themen 13
W OOP Warenlager mit Array(Konstruktor, Methoden) Java Basics - Anfänger-Themen 39
B Variablen von Methoden übertragen Java Basics - Anfänger-Themen 2
M Unterklasse soll nicht alle Methoden erben Java Basics - Anfänger-Themen 3
Curtis_MC Parameter-Übergabe bei Klassen und Methoden Java Basics - Anfänger-Themen 12
H Aufruf von Methoden durch Methoden Java Basics - Anfänger-Themen 3
W Methoden Verständnisfrage Vererbung von Methoden Java Basics - Anfänger-Themen 14
H Wie kann ich durch Methoden definiren? Java Basics - Anfänger-Themen 8
D Methoden Scannervariablen in static Methoden Java Basics - Anfänger-Themen 5
P Verzweigungen und Methoden Java Basics - Anfänger-Themen 10
C Methoden/Klassen Übergabewerte Java Basics - Anfänger-Themen 8
B Methoden Mehrere ähnliche Methoden zusammenfassen Java Basics - Anfänger-Themen 24
C Java Klassen/Methoden/Übergabeparameter Java Basics - Anfänger-Themen 4
C Java Methoden "Parameter" Problem Java Basics - Anfänger-Themen 16
B Polymorphie Warum funktionieren polymorphe Referenzvariablen bei überschriebenen Methoden und bei nicht überschriebenen nicht? Java Basics - Anfänger-Themen 3
B Methoden Java Basics - Anfänger-Themen 1
T Körper Brechnung - Lokale Variablen in Methoden übergeben Java Basics - Anfänger-Themen 10
P Methoden richtig anwenden Java Basics - Anfänger-Themen 3
C Zusammenfassen von Methoden in einer Hilfsmethode Java Basics - Anfänger-Themen 19
A Methoden Serialisieren Java Basics - Anfänger-Themen 17
N JUnit und private Methoden testen. Java Basics - Anfänger-Themen 9

Ähnliche Java Themen

Neue Themen


Oben