2 Rückgabewerte?

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
hallo,

habe eine Methode, diese soll mir eine Liste mit long werten und eine Schule(Objekt eigener Klasse) zurücliefern.
Habe vorher Delphi programmiert und da konnte man das durch Angabe von var vor der Variable als referenz übergeben und so alle rückgabewerte angeben.
Gibts das in Java auch soetwas? Oder wie kann ich sonst mehr als einen Parameter zurückgeben?
 

Leroy42

Top Contributor
Code:
class MyRückgabe {
  long[] dieLongs;
  Schule dieSchule;
}
...
MyRückgabe methode() {
  MyRückgabe back = new MyRückgabe();
  back.dieLongs = /* was auch immer */
  back.dieSchule = meineSchule;
  return back;
}
 
G

Gast

Gast
Hmm muss ich das denn jedesmal machen, wenn ich mehrere Rückgabewerte habe? Ich dachte das ginge einfacher. Also nicht so umständlich. Mit jedesmal ner inneren Klasse. Gibts denn noch andere methoden?
 
G

Gast

Gast
Ok, dann glaube ich ist die erste methode doch besser.

Danke für den tipp. Muss mich halt erst noch umgewöhnen. :)
 

The_S

Top Contributor
Also mir fällt gerade keine (sinnvolle) Situation ein, in der es nötig ist, zwei Werte zurück zu geben, die nicht Objekte der selben Klasse sind. Dazu müsste es ja ne Methode geben

Code:
public rueck1, rueck2 getRueck1AndRueck2() {}

Warum dann nicht

Code:
public rueck1 getRueck1() {}
public rueck2 getRueck2() {}

? Und wenn die Werte voneinander abhängen (Berechnungen etc.), dann ist sowas imho immer noch schöner

Code:
public void ermittleRueck1AndRueck2() {}
public rueck1 getRueck1() {}
public rueck2 getRueck2() {}

Oder eben gleich eine gemeinsame Klasse, aber nur wenn die Rückgabewerte auch wirklich zusammen passen.
 

Niki

Top Contributor
Das ist so nicht richtig. Objekte werden in Java by reference übergeben, die Referenz aber by value. Propiers einfach aus:
Code:
public void method1(){
StringBuffer sb = new StringBuffer();
method2(sb);
System.out.println(sb.toString());
}

public void method2(StringBuffer sb){
sb.append("test");
}

Du wirst sehen dass test ausgegeben wird, weil du die Referenz an die Methode method2 übergibst. Bei Strings und primitiven Typen geht das natürlich nicht, bei allen anderen Objekten aber schon!
 

Niki

Top Contributor
Leroy42 hat gesagt.:
Niki hat gesagt.:
Das ist so nicht richtig. Objekte werden in Java by reference übergeben, die Referenz aber by value.

Das ist aber noch lange kein call-by-reference, wie es in manchen anderen
Sprachen gibt.

Was ist es denn sonst? Du übergibst die Referenz an eine Methode, mehr call by reference wirds wohl nicht geben. Es gibt bei der Programmer-Zertifizierung genau diese Frage, wie die Objekte übergeben werden. Die richtige Antwort ist by Reference. Es gibt auch die Frage wie die Referenzen übergeben werden. Diese werden by Value übergeben.

Beschreib bitte was du genau unter call by reference verstehst, damit ich mir ein Bild machen kann.
 

Leroy42

Top Contributor
Code:
void swap(int& a, int& b) {
  int help = a;
  a = b;
  b = help;
}

void main() {
  int x = 1;
  int y = 2;
  swap(x, y);
  // jetzt ist x=2 und y=1
}
 

Niki

Top Contributor
Ja, bei primitiven Datentypen und Strings geht das in Java nicht (das hab ich aber oben schon erwähnt), aber OBJEKTE werden by reference übergeben!
 

Wildcard

Top Contributor
Du kannst dich drehen und wenden wie du willst, das ändert nichts an den Tatsachen.
Objekte werden zwar durch Referenzen angesprochen, aber Methodenaufrufe sind call-by-value.
Der value ist in diesem Falle die Referenz, die bei dem Vorgang kopiert wird.
James Gosling hat gesagt.:
"There is exactly one parameter passing mode in Java -- pass by value -- and that helps keep things simple."
Zumindest ihm sollte man doch glauben, oder? :wink:
 
B

bygones

Gast
Niki hat gesagt.:
Ja, bei primitiven Datentypen und Strings geht das in Java nicht (das hab ich aber oben schon erwähnt), aber OBJEKTE werden by reference übergeben!
und wenn du es leroy und wildcard nicht glauben willst...

zu deiner argumentation... bei Strings geht das nicht, aber bei Objekten... was isn String ? n primitiver Datentyp ?

achja - und schreib mir bitte dann eine solche swap funktion auf objekten (und nein, wir nutzen keine instanz-static variablen) ?!

siehe auch http://www.java-forum.org/de/viewtopic.php?t=5390

----------------------------

zum thema.

ich mach mir hierfuer immer gern eine einfache Tupel Klasse
Code:
public class Tupel<E,F> {
 private E first:
 private F second:
 
 // konstruktor und getter methoden
}
 

Niki

Top Contributor
Jaja.... ihr hab schon recht, swappen kann ich nicht, weil ich eine Kopie der Referenz bekomme! Jedoch kann ich den Inhalt des übergebenen Objektes ändern.

Bin ja hier richtig arg unter beschuss :)
 
B

bygones

Gast
Leroy42 hat gesagt.:
Niki hat gesagt.:
Bin ja hier richtig arg unter beschuss :)

Tja mit call-by-reference spassen wir eben nicht! :cool:
*waffen entladen*.

Oh, man, I will never forgive your ass for this shit. This is some fucked-up repugnant shit.

Jules, did you ever hear the philosophy that once a man admits that he's wrong that he is immediately forgiven for all wrongdoings? Have you ever heard that?

Get the fuck out my face with that shit! The motherfucker that said that shit never had to pick up itty-bitty pieces of skull on account of your dumb ass.

I got a threshold, Jules. I got a threshold for the abuse that I will take. Now, right now, I'm a fuckin' face car, right, and you got me the red. And I'm just sayin', I'm just sayin' that it's fuckin' dangerous to have a race car in the fuckin' red. That's all. I could blow.

Oh! Oh! You ready to blow?

Yeah, I'm ready to blow.

Jules: Well, I'm a mushroom-cloud-layin' motherfucker, motherfucker! Every time my fingers touch brain, I'm Superfly T.N.T., I'm the Guns of the Navarone! IN FACT, WHAT THE FUCK AM I DOIN' IN THE BACK? YOU'RE THE MOTHERFUCKER WHO SHOULD BE ON BRAIN DETAIL! We're fuckin' switchin'! I'm washin' the windows, and you're pickin' up this nigger's skull!


:wink:
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben