Als Rückgabewert ode call by referenz was ist sauberer?

Kalkulon

Mitglied
Habe eine Frage, was haltet ihr für schöner? ich habe eine Methode die ein Array als Übergabeparameter bekommt. bis jetzt habe ich es so gemacht:

[JAVA=42]

class Test {
//Möglichkeit 1
public byte[] test(byte[] test) {
// tu irgendwas
}
// Möglichkeit 2
public void test(byte[] test) {
// tu irgendwas
}

public static void main(String[] args) {

// Möglichkeit 1
Test t = new Test();
byte[] data = new byte[]
data = t.test(data)

// Möglichkeit 2

t.test(data);
}
}


[/code]
 

Kalkulon

Mitglied
es handelt sich doch um ein Array und die sind in Java Objekte, welche wiederum als Referenz übergeben werden.

Sonst wären Dinge wie byte[] data = new byte[2]; System.out.println(data.length); nicht möglich!
 
S

SlaterB

Gast
@Firestorm87
gut dass du dennoch postest ;)


> data = t.test(data)
ist recht sinnlos wenn test() dasselbe Array zurückgibt,
erstellt es ein neues sähe es ganz anders aus

denselben Parameter zurückzugeben macht nur dann Sinn, wenn das zu irgendwas nützt,
z.B. direkter Weitergabe:
t.test2(t.test(data))
 

Kalkulon

Mitglied
warum?

edit: Das warum bezog sich auf die Sinnlosigkeit von Arrays.

In der Methode mach ich schon ein neues Array, könnte aber die Referenz "umbiegen".
 
Zuletzt bearbeitet:

Landei

Top Contributor
Ich versuche grundsätzlich, an den Methoden-Argumenten nicht herumzufummeln. Bei einem Rückgabewert "weiß man, was man hat", dass eine Methode ihre Argumente manipuliert ist weniger offensichtlich.

Natürlich können Effizienzgründe, das Fehlen eines Tupel-Typs in Java (wenn man mehrere Werte zurückgeben will) oder auch eine dummes Bibliotheksdesign dagegen sprechen, dann würde ich es aber ordentlich kommentieren.

So Sachen wie beim StringBuilder, der sich bei append() selbst manipuliert und auch noch selbst zurückgibt, halte ich für gefährlich, weil es im ersten Augenblick so aussieht, als würde er nur ein neues, verändertes Objekt zurückliefern.

Wenn keine guten Gründe dagegen sprechen, bin ich für einen eher funktionalen Stil: Unveränderliche Objekte und Methoden ohne Seiteneffekte (und Manipulation der Argumente ist ein Seiteneffekt). Damit ist man übrigens automatisch threadsafe.
 

Firestorm87

Bekanntes Mitglied
@Firestorm87
gut dass du dennoch postest
Hier soll doch keine unterschwellige Botschaft stecken? :D
ok alles klar also bleib ich dabei byte[] methode(final byte[] ba)...

Solltest dann aber aufpassen, dass du das Element ba nicht direkt weiterverarbeitest, da du sonst trotzdem deine parameter veränderst, auch wenn du ihn hinten herum wieder zurück gibst...
 
B

bygones

Gast
Ich versuche grundsätzlich, an den Methoden-Argumenten nicht herumzufummeln. Bei einem Rückgabewert "weiß man, was man hat", dass eine Methode ihre Argumente manipuliert ist weniger offensichtlich.
this.

jegliche Seiteneffekte sollten IMMER vermieden werden
Java:
Collection<String> foo = ... // wird schoen gefuellt
someFunnyName(foo); 
// ups aufeinmal ist foo leer oder so..
nicht gut...
Java:
Collection<String> foo =  someFunnyName()
so gut.
 
B

bygones

Gast
ok alles klar also bleib ich dabei byte[] methode(final byte[] ba)...

ich hoffe dein realer code ist anders als
Java:
  Test t = new Test();
  byte[] data = new byte[]
  data = t.test(data)

wenn schon dann bitte
Java:
  Test t = new Test();
  byte[] data = t.test(); // test erstellt sich den array... warum sollte es der aufrufer vorher schon tun ???
 

Kalkulon

Mitglied
doch mein realer Code sieht in etwa so aus! ich habe eine Vorwärtsfehlerkorrektur implementiert übergebe dieser ein Byte Array übertrage es über einen "unzuverlässigen" Übertragungskanal und decodiere die bytes wieder, bevor ich sie weiterverarbeite.

Das ganze sieht dann schon in etwa so aus:

byte[] data = fec.encode("Nachricht".getBytes());

...
Übertragung der Daten
...

DatagramPacket packet = new DatagramPackt.....

socket.receive(packet);
byte[] data = packet.getContent();
data = fec.decode(data);

System.out.println(new String(data));// Nachricht


So in etwa hab jetzt die genaue Java Syntax nicht im Kopf.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Rückgabewert Directories Filechooser Allgemeine Java-Themen 2
U in java an einen Rückgabewert aus matlab rankommen Allgemeine Java-Themen 2
S Threads Rückgabewert in Asynchronen Schedulers Allgemeine Java-Themen 7
P Methode mit beliebigem Rückgabewert Allgemeine Java-Themen 3
S Methoden Eigene Klasse als Rückgabewert Allgemeine Java-Themen 6
E rückgabewert ist immer null Allgemeine Java-Themen 2
S Rückgabewert runtime Allgemeine Java-Themen 11
E Rückgabewert von Jave in Bash - Script Allgemeine Java-Themen 4
S Methode mit, vom aufrufenden Objekt abhängigen, Rückgabewert Allgemeine Java-Themen 13
S Rückgabewert von threads? Allgemeine Java-Themen 7
V Rückgabewert von Methode nie erreicht aber gefordert? Allgemeine Java-Themen 6
M Rückgabewert von Runtime.getRuntime().exec() Allgemeine Java-Themen 2
M Rückgabewert einer Klasse Allgemeine Java-Themen 4
T invoke() einer Methode - Probleme mit Rückgabewert Allgemeine Java-Themen 5
U Probleme bei Rückgabewert Allgemeine Java-Themen 28
Z Array als Rückgabewert einer Methode Allgemeine Java-Themen 5
M Thread mit Rückgabewert Allgemeine Java-Themen 4
A Java Call-Hierarchie Allgemeine Java-Themen 2
M Java - Call by value <-> Call by reference Allgemeine Java-Themen 16
V JNI Call Crash verhindern (abfangen) Allgemeine Java-Themen 2
E wie call by reference mit Wrapper-Klassen? Allgemeine Java-Themen 2
J InvocationException im Thread (innerhalb von call() einer Callable Klasse) Allgemeine Java-Themen 2
hdi ClassLoader / Constructor Call intern Allgemeine Java-Themen 11
S Performance und Function Call Depth Allgemeine Java-Themen 6
MQue call by value Allgemeine Java-Themen 5
P call by value/referenz Allgemeine Java-Themen 4
N Sieht aus wie ein "Call by Referece/Call by Value" Allgemeine Java-Themen 7
S Active-X Call / Invoke?` Allgemeine Java-Themen 7
S Call by Value Allgemeine Java-Themen 9
sliwalker Call by Reference - Was stimmt denn nun ? Allgemeine Java-Themen 14
H Aus der FAQ: Call by Value <-> Call by Reference Allgemeine Java-Themen 8
LimDul Hä? Lambda-Ausdruck geht, Methoden-Referenz nicht Allgemeine Java-Themen 8
MiMa Referenz auf Objekte und deren Inhalte Allgemeine Java-Themen 12
kodela Übergabe einer Referenz Allgemeine Java-Themen 20
J Verständnis Frage zur Instanz, Objekte, Instanzierung, Referenz Allgemeine Java-Themen 14
M Compiler-Fehler Methoden-Referenz Allgemeine Java-Themen 5
S OOP this-Referenz als Konstruktor-Übergabe Allgemeine Java-Themen 8
M neues Objekt speichern, nicht Referenz Allgemeine Java-Themen 10
Y POI auf eine Referenz (Datei/Internetseite) anwenden Allgemeine Java-Themen 9
B Speicherverbrauch Objekt-Referenz Allgemeine Java-Themen 11
D Referenz einer Funktion aus einer anonymen Klasse? Allgemeine Java-Themen 3
P Threads ohne Referenz & der Garbage Collector Allgemeine Java-Themen 2
A Observer Pattern: feuern bei neuer Referenz-Zuweisung? Allgemeine Java-Themen 8
woezelmann referenz der outer class aus static nested class heraus Allgemeine Java-Themen 7
T Interface-Referenz Allgemeine Java-Themen 2
K ArrayList Referenz Allgemeine Java-Themen 8
MQue this- Referenz Allgemeine Java-Themen 4
G referenz von variablen Allgemeine Java-Themen 9
T Referenz und GC? Allgemeine Java-Themen 16
T JNI Referenz auf Variable in Java? Allgemeine Java-Themen 2
MQue Datei- referenz schließen Allgemeine Java-Themen 5
S Referenz auf Funktion? Allgemeine Java-Themen 16
S Stream ohne Referenz kopieren ? Allgemeine Java-Themen 4
G Referenz und Garbagecollector Allgemeine Java-Themen 4
D Map: Referenz oder Int-ID als key speichern? Allgemeine Java-Themen 11
M Stil-Frage: this-Referenz Allgemeine Java-Themen 38
B wird Vektor als Referenz übergeben? Allgemeine Java-Themen 5
G 2 Objekte der selben Klasse zusammenfügen und alte Referenz Allgemeine Java-Themen 19
V Übergabe per Referenz. Allgemeine Java-Themen 5
G Eine C/C++ Referenz in einem Java Object speichern Allgemeine Java-Themen 5
G Referenz auf Variable! Allgemeine Java-Themen 3
F array als referenz/werteparameter übergeben? Allgemeine Java-Themen 2
M Referenz wird nicht überschrieben? Allgemeine Java-Themen 2
C GC: Referenz entfernen Allgemeine Java-Themen 6
K Referenz löschen Allgemeine Java-Themen 3
T Exception im Constructor -> null-Referenz zurückgeben Allgemeine Java-Themen 6

Ähnliche Java Themen

Neue Themen


Oben