übergebenes Argument als Ziel

Status
Nicht offen für weitere Antworten.

xysawq

Bekanntes Mitglied
Hallo, hab mir mal überlegt, dass es in meinem Programm sehr hilfreich wäre, wenn ich das an eine Methode übergebene Argument dazu benutze, das Ergebnis der Berechnungen der aufgerufenen Methode darin zu speichern, und nicht über return gehen zu müssen.


Der sinn dahinder ist schnell an einem Beispiel erklärt:

Code:
//Ich erzeuge ein Object, das beschrieben werden soll.
String s = null;

//Und eine Variable, die ich später erkläre.
int i = 0;

//Bei dieser Methode soll ein String generiert werden, der dann in s
//abgelegt wird und in i kommen Statuswerte (z.B. Zahlen von 0 bis 5, die jede eine Bedeutung haben).
i = generiereString(s);

Wie könnte also der Aufruf der Methode oder die Methode selbst aussehen, damit das funktioniert (wie man einen String generiert braucht ihr mir hier nicht zu sagen ;) ).


Machbar ist das ja, wie man z.B. bei InputStream.read(data, 0, length) sehen kann, bei der unter anderem ein Array (data) übergeben wird, in das das Eingelesene geschrieben wird. Als return-Wert wird die tatsächlich ausgelesene Länge zurück gegeben.


Vielen Dank für eure Hilfe (und ja ich weiß, dass es schon "spät" ist).
 

diggaa1984

Top Contributor
xysawq hat gesagt.:
Wie könnte also der Aufruf der Methode oder die Methode selbst aussehen, damit das funktioniert?

Machbar ist das ja, wie man z.B. bei InputStream.read(data, 0, length) sehen kann, bei der unter anderem ein Array (data) übergeben wird, in das das Eingelesene geschrieben wird. Als return-Wert wird die tatsächlich ausgelesene Länge zurück gegeben.

Hm wieso stellt sich dir diese Frage noch, wenn du selbst Beispiele bringst bei denen du vermittelst es richtig verstanden zu haben?

Mehr als das ganze im Parameter zu übergeben, und die Methode mit dem Parameter arbeiten zu lassen kannst doch in dem Fall nicht. :autsch:
 

xysawq

Bekanntes Mitglied
Also wenn ich sozusagen eine Klasse

Code:
class Wertesammlung
{
	String s = null;
	int i = 0;
	...
}

hätte und diese dann an eine Methode

Code:
int arbeiten(Wertesammlung werte)
{
	werte.s = "Text";
	werte.i = 123;
	...
	
	return 0;
}

würde das funktionieren!?!


Gleich mal testen... ^^
 

BjörnBu

Aktives Mitglied
Mal ein bischen was zu den hintergründen:

In java sind alle methoden erstmal call by value. D.h. du kannst Methodenparameter nicht verändern, da sie beim Aufruf kopiert werden. So, und jetzt zu den "Sonderfällen" ;-)

Objekte:

deine jeweilige variable, die du als Parameter beim Methodenaufruf angibst ist ja schon nur eine Referenz auf das Objekt im Speicher. Also wird nur diese Referenz kopiert. Wenn du in der Methode Änderungen am eigentlich Objekt machst, sind die überall verfügbar. Wiest du der referenz ein neues Objekt zu, ist das außerhalb der Methode unwichtig und das alte besteht weiter

Arrays:

genau wie bei dem Objekten wird nur die Referenz auf das Array kopiert. Deshalb geht das Beispiel, das du angesprochen hast

Und die Extra Ausnahme:

String:

Strings sind unveränderbar (deshalb geben auch concat und go alle einen String zurüclk und ändern nichts an dem Objekt auf dem sie ausgeführt werden). Deshalb ist es unmöglich diesen String in der Methode zu ändern. Das Gleich gilt für s = s + " bla". Auch der plus Operator gibt einen neuen String zurück.

Abhilfe schaffen für primitive Datentypen übrigens die Wrapper-Klassen (int -> Interger, etc) und für Strings StringBuffer.

PS: Dein Beispiel sollte funktionieren
 

xysawq

Bekanntes Mitglied
Jup geht... super... brauche das auch für eine eigene Klasse, habs aber bis jetzt nur zu Testzwecken mit String probiert.

Danke ;).

EDIT: Zum Glück nehme ich zum Test immer die Sonderfälle ^^.
 

BjörnBu

Aktives Mitglied
wunderbar :)

Vorsicht ist nurnoch an einer Stelle geboten:

Code:
public void deineMethode(DeineKlasse dk){
    dk.setWasAuchImmer(value); /* Das sollte funktionieren, das iwllst du ja auch */
    ...
    dk = <irgendwas> /* das darfst du aus oben genannten Gründen nicht machen. Da gibt's den selben Effekt wie bei String*/

Wollte es nur nochmal explizit ansprechen, damit nichts unerweartetes passiert irgendwann.
Das besondere liegt nicht an Spring selbst, sondern dass alle Möglichkeiten einen String zu ändern so wie im "verbotenen" Beispiel aussehen. Wollte das nur nochmal deutlich machen.

Liebe Grüße
Björn
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
CptK Überprüfen ob übergebenes Objekt zu Generics passt Java Basics - Anfänger-Themen 2
U Erste Schritte Server will nicht übergebenes Objekt speichern Java Basics - Anfänger-Themen 5
K auf übergebenes Objekt zugreifen Java Basics - Anfänger-Themen 5
Z actual and formal argument lists differ in length Java Basics - Anfänger-Themen 13
S ArrayList.add Falsches Argument? Java Basics - Anfänger-Themen 1
M Argument in Integer verwandeln und das Doppelte davon printen Java Basics - Anfänger-Themen 9
K Operatoren The Operator * is undefined for the argument type(s) double, String Java Basics - Anfänger-Themen 4
H Argument bei Methode .toArray() Java Basics - Anfänger-Themen 8
V RMI - argument type mismatch Java Basics - Anfänger-Themen 1
V Operatoren Java if-else argument Java Basics - Anfänger-Themen 4
A Double[] Array zahlen per Argument übergeben Java Basics - Anfänger-Themen 5
L The operator && is undefined for the argument type(s) String, boolean Java Basics - Anfänger-Themen 8
H Methoden null-Argument bei varargs Java Basics - Anfänger-Themen 6
M Hochkomma in Argument Java Basics - Anfänger-Themen 7
V Erste Schritte Return ohne Argument Java Basics - Anfänger-Themen 6
M Argument der Kommandozeile überprüfen Java Basics - Anfänger-Themen 4
C Begriffe Parameter und Argument Java Basics - Anfänger-Themen 4
danielita Dateiname als Argument Java Basics - Anfänger-Themen 3
nabla Threads mit Argument? Java Basics - Anfänger-Themen 2
I Fehlendes Argument in Main-Methode abfangen Java Basics - Anfänger-Themen 15
A Klassennahmen über Kommandenzeile-Argument mitteilen Java Basics - Anfänger-Themen 2
L Dieses Problem nagt an meiner Würde - Argument * Java Basics - Anfänger-Themen 4
I .lnk ausführen oder das Ziel auslesen Java Basics - Anfänger-Themen 7
S Ziel in Spiel einbauen Java Basics - Anfänger-Themen 4
A JDialog, Owner JFrame ZIEL: nciht in der taskbar Java Basics - Anfänger-Themen 9
M Frameworks - mehre Wege zum Ziel? Java Basics - Anfänger-Themen 9

Ähnliche Java Themen

Neue Themen


Oben