"Call by Reference"

Status
Nicht offen für weitere Antworten.

Scuby

Mitglied
Hallo zusammen,

wie allgemein bekannt ist, gibt es in Java leider den Aufrauf "Call by Reference" nicht mehr, egal ob primitive Datentypen oder nicht. Alles wird alles mit "Call by Value" abgefrühstückt. Nun habe ich allerdings ein Problem. Ich muss bei einem Methodenaufruf mehrere Werte zurückgeben.. den einen Wert kann ich per return() zurückgeben, die anderen Werte, die in C++ immer per Call by Reference manipuliert werden konnten, kann ich in Java nun leider nicht mehr manipulieren... gibt es eine einfache Lösung für dieses Problem, oder muss ich mir zwangsweise eine eigenen Klasse bauen und die implementieren, damit ich die Werte weitergeben kann?

Über eine Antwort von euch würde ich mich sehr freuen...

Gruß
Scuby
 
B

bygones

Gast
was heisst ihr "nicht mehr"... gabs noch nie.

und wenn du mehrere Rueckgabe werte brauchst dann schaff dir entweder einen array/liste oder besser eine passende Klasse - wir sind hier in einer OOP sprache - also nutze es auch.

und wenn man bei c++ callbyreference missbraucht weil man mehr rueckgabewerte braucht dann hat man es nicht verstanden imo
 

faetzminator

Gesperrter Benutzer
Natürlich funktioniert das. Es wird die Objektreferenz by value übergeben. Solange du nicht ein neues Objekt auf die Variable legst, kann der Aufrufer die Änderungen "mitverfolgen". Dies funktioniert natürlich mit primitiven Datentypen und Strings (immutable) nicht. Wenn du aber eine Containerklasse schreibst, funktioniert das.
 
B

bygones

Gast
kann der Aufrufer die Änderungen "mitverfolgen". Dies funktioniert natürlich mit primitiven Datentypen und Strings (immutable) nicht. Wenn du aber eine Containerklasse schreibst, funktioniert das.
funktioniert mit allen immutables net - also je nach dem wie die Containerklasse geschrieben wird dann die auch
 
S

Spacerat

Gast
...mal so'n kleiner "Call by Reference"-Missbrauchs-Emulator :lol:
Java:
public <T extends Object> void returnMoreValues(Collection<T> returnvalues)
{
  returnvalues.add((T) avalue);
  returnvalues.add((T) anothervalue);
  returnvalues.add((T) whatever);
  returnvalues.add((T) anotherwhatever);
}
 
Zuletzt bearbeitet von einem Moderator:

Landei

Top Contributor
Jede vernünftige Programmiersprache (sic!) hat Tupel für sowas, aber man kann sie auch nachrüsten: Java Tuple - Home

Nicht nur praktisch und typsicher für Rückgabewerte, sondern auch für zusammengesetzte HashKeys usw.
 

kirdie

Bekanntes Mitglied
Ich bin zwar ziemlicher Javafan aber genau solche Sachen nerven mich momentan die ganze Zeit.

Was ich noch als mögliche Lösung habe:

Java:
public void addOne(int[] number)
{
 number[0]=number[0]+1;
}

public static void main(String[] args)
{
 int x = addOne(new int[] {10});
}
 

Marco13

Top Contributor
Hm. Sowas ist eigentlich krampfig (speziell wenn die Methode auch das Ergebnis zurückgeben könnte). So ein Schema finde ich persönlich höchtens(!) akzeptablel, wenn man versucht, eine C-Funktion möglichst "genau" nach Java abzubilden *pfeif* ... aber "schön" ist das sicher nicht.
 
B

bygones

Gast
Ich bin zwar ziemlicher Javafan aber genau solche Sachen nerven mich momentan die ganze Zeit.

Was ich noch als mögliche Lösung habe:

Java:
public void addOne(int[] number)
{
 number[0]=number[0]+1;
}

public static void main(String[] args)
{
 int x = addOne(new int[] {10});
}
sowas ist unsinnig - sorry... warum will man so ein konstrukt ? [c]x++[/c] ist sogar leicht verstaendlicher
 

tfa

Top Contributor
Soll wohl nur ein einfaches Beispiel sein. Trotzdem sollte man auf Funktionen mit "Seiteneffekten" verzichten. Das führt meist zu schwer testbarem, fehleranfälligem Code. Ich bin froh, dass Java sowas nicht unterstützt.
 

Marco13

Top Contributor
Das sollte wohl nur ein Beispiel sein ;)

Wenn man eine C-Funktion hat wie
Code:
float computeValue(float a, int *someResult);
Dann hat man bei der Protierung nach Java die Wahl, die signatur zu ändern, oder sowas zu machen wie
Code:
float computeValue(float a, int someResult[/*1*/]);
(siehe JOGL...)
 

ARadauer

Top Contributor
Warum will man irgendwelchen Primitiven Datentypen übergen? Was stellt das dar?
Nimm halt ein Objekt. Bzw warum kannst du den wert nicht zurück geben? Wird return schon zur Fehlebehandlung benutzt? Genau für sowas gibts Exceptions... Diese Konzepte aus C wurden bewusst verändert, da sie nur zu Problemen geführt haben ;-)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Java call by Value oder Reference Java Basics - Anfänger-Themen 35
R Call-by-Value, Call-by-Reference, Call-by-Name Ausgabe Java Basics - Anfänger-Themen 1
X Verständnisproblem Call-By-Reference Java Basics - Anfänger-Themen 5
U Worin besteht der Unterschied zwischen call by reference und call by value? Java Basics - Anfänger-Themen 14
H call by reference & value Java Basics - Anfänger-Themen 14
B Call by Value/Reference Java Basics - Anfänger-Themen 4
Joew0815 Methoden Objekt als Methoden-Parameter - Kein call-by-reference? Java Basics - Anfänger-Themen 12
T Array prozedur, call by reference ? Java Basics - Anfänger-Themen 6
B Variablen Wie macht man eine call by reference mit primitiven Datentypen in Java? Java Basics - Anfänger-Themen 2
S call by reference? Java Basics - Anfänger-Themen 52
F Verständisproblem bzgl. nicht Vorhandensein von Call-by-reference Java Basics - Anfänger-Themen 2
B Call By reference (Null pointer exception) Java Basics - Anfänger-Themen 6
C Call by reference Java Basics - Anfänger-Themen 11
W call-by-reference-Effekt bei Objekten Java Basics - Anfänger-Themen 3
M try-catch, call-by-reference, Streaming und Strings Java Basics - Anfänger-Themen 10
S call by reference Java Basics - Anfänger-Themen 7
F Wie kann ich call by reference umgehen? Java Basics - Anfänger-Themen 14
F Rekursive Aufrufe, Parameterübergabe, call by reference Java Basics - Anfänger-Themen 3
F Call-By-Reference umgehen Java Basics - Anfänger-Themen 4
B Call by Reference Java Basics - Anfänger-Themen 7
S call by reference vs. call by value - pls help Java Basics - Anfänger-Themen 7
K Eigene Annotations, Pre-/Post-/Call-Method Java Basics - Anfänger-Themen 6
G Klassen Call by Value auch bei Objekten? Java Basics - Anfänger-Themen 2
R Call By Referene? Java Basics - Anfänger-Themen 10
N Methode erfüllt nicht den zweck (Call by value) Java Basics - Anfänger-Themen 17
0 Call by value Java Basics - Anfänger-Themen 3
J Call by ... Java Basics - Anfänger-Themen 16
F java call jython Java Basics - Anfänger-Themen 7
C Unchecked Call? Wie Warnung beseitigen? Java Basics - Anfänger-Themen 3
I call to super must be first statement in constructor Java Basics - Anfänger-Themen 3
M Cannot make a static reference to the non-static method Java Basics - Anfänger-Themen 10
T Boolean by Reference Java Basics - Anfänger-Themen 6
T Schleifenindex "by reference" / "by value" Java Basics - Anfänger-Themen 13
O Socket by reference übergeben Java Basics - Anfänger-Themen 0
A Cannot make a static reference to the non-static field Java Basics - Anfänger-Themen 6
O Illegal Group Reference Java Basics - Anfänger-Themen 4
L Cannot make a static reference to the non-static method Java Basics - Anfänger-Themen 6
K Variablen Cannot make a static reference to the non-static field time Java Basics - Anfänger-Themen 6
P Compiler-Fehler Cannot make a static reference to the non-static field process Java Basics - Anfänger-Themen 3
C Reference - wird gegen meinen Willen - auf null gesetzt Java Basics - Anfänger-Themen 2
F Mal wieder: Cannot make a static reference to the non-static method Java Basics - Anfänger-Themen 9
F Cannot make a static reference to the non-static method Java Basics - Anfänger-Themen 3
M Reference Java Basics - Anfänger-Themen 2
B Cannot make a static reference...?? Java Basics - Anfänger-Themen 5
B Mal wieder "cannot make a static reference..." Java Basics - Anfänger-Themen 2
N Reference to non-static method Java Basics - Anfänger-Themen 8
C Passing Reference by Value Java Basics - Anfänger-Themen 4
G Wieso ist eine String-Übergabe keine by-reference-Zuweisung? Java Basics - Anfänger-Themen 7
R Cannot make a static reference to the non-static method Java Basics - Anfänger-Themen 5
L [Gelöst] Cannot make a static reference ... Java Basics - Anfänger-Themen 12
N Connot make a static reference. deklarierungsfehler Java Basics - Anfänger-Themen 10
T object reference counts Java Basics - Anfänger-Themen 14
T Cannot make a static reference to the non-static field Java Basics - Anfänger-Themen 8
frau-u Altes Problem: non-static method cannot be reference Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben