Methode: ArrayList byRef übergeben

Status
Nicht offen für weitere Antworten.

xray200

Mitglied
Hallo,

ich stehe etwas auf dem Schlauch: ich habe eine Funktion, die als Parameter eine ArrayList erhält, deren Inhalt modifiziert wird.
Die Funktion gibt ein Boolean zurück und soll die Weiterverwendung der ArrayList ermöglichen.

Die Inhalte der ArrayList kann der Aufrufer aber nicht "sehen", er bekommt nur die in der Funktion initialisierte ArrayList ohne Inhalt zurück.

Wird das nicht byRef übergeben, sollte das nicht gehen oder geht es nur bei Mehtoden ohne Rückgabewert?a
 

Wildcard

Top Contributor
Alles in Java ist call by value, allerdings ist der Value nicht das Objekt, sondern die Referenz auf das Objekt. Sprich: manipulierst du ein übergebenes List Objekt, dann sind die Änderungen für den Aufrufer auch sichtbar.
 
B

bygones

Gast
hae ?

bygones

Objekte werden per *hust" Referenz (gibt es in Java nur leider nicht) uebergeben und somit sind veraenderungen sichtbar...
 

xray200

Mitglied
hae ?

bygones

Objekte werden per *hust" Referenz (gibt es in Java nur leider nicht) uebergeben und somit sind veraenderungen sichtbar...

Ich initialisiere die ArrayList, die per Parameter (also als Referenz) übergeben wird in der Funktion neu und fülle sie mit Inhalt.

Das müsste doch gehen, oder, ich muss die Liste weiterverarbeiten könne mit den Inhalten?

Java:
public static Boolean check(ArrayList<String> liste){
		
		liste=new ArrayList<String>();
		
		liste.add("Test");
		return true;
	}
 
B

bygones

Gast
fuer mich ist das code smell...

warum bekomme ich eine Liste als Parameter, wenn diese dann so und so neu erstellt wird... und warum gibt es dann noch true zurueck ?!

entweder ist das nur ein bsp, auch dann ist es aber merkwuerdig
 

xray200

Mitglied
Ist jetzt nur ein Teil des Codes, sie wird unter umständen neu initialisiert und sollte dann weiterverwendet werden.

Warum geht das so nicht bei mir? Sollte es?
 

tfa

Top Contributor
Du missbrauchst den Methodenparameter als lokale Variable. Wenn die Methode zurück kehrt, ist die neu angelegte ArrayList weg, da das Objekt außerhalb nicht mehr sichtbar ist. Es gibt kein Call-by-Reference in Java.
Du könntest aber clear() auf die (übergebene) Liste aufrufen, um sie zu löschen.
 

xray200

Mitglied
Du missbrauchst den Methodenparameter als lokale Variable. Wenn die Methode zurück kehrt, ist die neu angelegte ArrayList weg, da das Objekt außerhalb nicht mehr sichtbar ist. Es gibt kein Call-by-Reference in Java.
Du könntest aber clear() auf die (übergebene) Liste aufrufen, um sie zu löschen.

Ich möchte einfach nicht nur Boolean zurückgeben, sondern auch den ggf. bearbeiteten oder neu initialisierten Inhalt der ArrayList.

Wie mache ich das am besten?
 

Michael...

Top Contributor
Deine Variable liste in der Methode ist quasi eine "lokale" Variable, d.h. die Liste die Du in der Methode erstellst ist nur innerhalb der Methode bekannt und entspricht nicht mehr der ursprunglichen Liste. Entweder Du machst es so
Java:
public list ArrayList<String>;
public boolean check(){
        list=new ArrayList<String>();
        list.add("Test");
        return true;
}
oder
Java:
public static boolean check(ArrayList<String> list){
        list.clear();
        list.add("Test");
        return true;
}
 

xray200

Mitglied
OK, ich dachte ich könnte sie in der Funktion auch neu initialisieren. (Dein 2. Bsp)

D.h. mit clear() wird sie nicht neu initialisiert. Das mache ich immer außerhalb richtig?
 

xray200

Mitglied
In Bsp1 wird eine neue Instanz erzeugt und der Variablen list zugewiesen.
In Bsp2 wird die bestehende Intstanz geleert und weiter verwendet.
Die Frage verstehe ich nicht. Was ist außerhalb und was machst Du da?

Mit Außerhalb meinte ich den Aufrufer. Das passt also.

Wobei ich mich frage: geht es nie, innerhalb einer Funktion einen Parameter neu zu initialiseren, den ich extern, außerhalb, also durch den Aufrufer dann noch verwenden will?
 

Wildcard

Top Contributor
Nein, dann das wäre Call-By-Reference, welches in Java nicht vorkommt. Du kannst das übergebene Objekt manipulieren, aber nicht die übergebene Referenz umbiegen, denn das ist nur eine Kopie.
 

xray200

Mitglied
Bei primitiven Datentypen kann ich aber den Parameter nicht modifizieren und weiterverwenden, da nur perValue übergeben oder?
 
B

bygones

Gast
Bei primitiven Datentypen kann ich aber den Parameter nicht modifizieren und weiterverwenden, da nur perValue übergeben oder?

ALLES in java wird byValue uebergeben es gibt KEIN byReference... egal primtiv oder objekte

natuerlich kannst du einen gegeben Wert manipulieren und weiterverwenden (egal ob primitiv oder Objekt)... die Frage ist was der Aufrufer sieht.
 

Schandro

Top Contributor
Variablen von Primitive Datentypen (und z.b. Strings, da immutable) können nicht durch "als Parameter übergeben" verändert werden, ja.

Alles wird "per Value" übergeben, bei nicht-primitiven Datentypen ist das halt der Value der Referenz ansich.
 

xray200

Mitglied
Kann ich denn ein Objekt in einer Methode erzeugen und dann mit einem externen Objekt "verlinken", also folgendes:

[Java]
public static ArrayList Sammlung=new ArrayList();

public void methode(){
ArrayList neueListe=new ArrayList();

//neueListe bearbeiten
Sammlung.add(neueListe)
}
[/Java]
 

xray200

Mitglied
Hallo, nun habe ich nochmal eine Nachfrage zum byRef, byValue Problem:

Ich benötige eine Methode, die einen int und drei Booleanwerte zurückgibt.

Also habe ich "return int" und sowie als Parameter für die Booleanrückgabe den Array "boolean[] speicher"

Der Array wird schon initialisiert übergeben.
In der Funktion mache ich dann
speicher[0]=... speicher[1]=... speicher[2]=...

Das sollte doch gehen oder?


Geht das dann auch, wenn das ein Array mit meinen Objekten ist und ich diese in der Funktion neu erzeuge, also:

speicher[1]=new meinObjekt();

Ich erhalte soweit ich das sehe dann nur als Rückgabe speicher[1]=null beim Aufrufer der Funktion.

Wie löse ich denn das am besten?
 
S

SlaterB

Gast
geht auch mit Objekten, das Array kann nicht neu zugewiesen werden, darf aber beliebig verändert werden
 

faetzminator

Gesperrter Benutzer
Ja das funktioniert. Du musst dir vorstellen, dass du immer Call bei Value hast. Bei einem nicht primitiven Datentyp (auch Arrays mit primitiven Datentypen) übergibst du als Value die Referenz auf jenes Objekt. Wenn du [c]x = new Foo()[/c] aufrufst, wird ein neues Foo erstellt und die Referenz davon in x gemerkt. Solange du aber die Referenz nicht anpasst, kannst du mit dem Objekt (also auch boolean[]) machen was du willst, der Aufrufer wird die Änderungen mitbekommen, da es ja das gleiche Objekt ist.
 

Painii

Bekanntes Mitglied
Wenn du in der Methode ein neues Objekt baust ist das nach aussen nicht zu sehen:

Java:
public void macheWas(boolean[] array){
 array = new boolean[1];
}
public static void main(String[] args){
 boolean[] a = new boolean[2];
 macheWas(a);
 boolean.length==2; //true
}

Wenn du das Attribut des Objekts veränderst ist das zu sehen!
Java:
public void macheWas(boolean[] array){
 array[0]=true;
}
public static void main(String[] args){
 boolean[] a = {false};
 macheWas(a);
 boolean[1]==true; //true
}
 

Leroy42

Top Contributor
Java:
public void macheWas(boolean[] array){
 array[0]=true;
}
public static void main(String[] args){
 boolean[] a = {false};
 macheWas(a);
 boolean[1]==true; //true
}

Du meintest wohl

Java:
public void macheWas(boolean[] array){
 array[0]=true;
}
public static void main(String[] args){
 boolean[] a = {false};
 macheWas(a);
 a[0]==true; //true
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
K ursprüngliche ArrayList ändert sich bei Übergabe in Methode Allgemeine Java-Themen 18
M Methoden Generische Methode für ArrayList Allgemeine Java-Themen 7
T Methoden Methode zum durchsuchen einer ArrayList Allgemeine Java-Themen 8
T ArrayList bzw. Vector per set-Methode? Allgemeine Java-Themen 3
W Hilfe bei Methode Allgemeine Java-Themen 14
Ü Methoden Arrays vergleichen - Methode Allgemeine Java-Themen 1
Simon16 compareTo Methode überschreiben Allgemeine Java-Themen 4
TheSkyRider Methode über DataInputStream "auslösen" Allgemeine Java-Themen 6
M CrudRepository save Methode mocken Allgemeine Java-Themen 6
thor_norsk toString() - Methode Allgemeine Java-Themen 6
A Clean Code: Variable vs. Methode Allgemeine Java-Themen 8
Encera Zweite Main-Methode zuschalten Allgemeine Java-Themen 18
M Optimierung einer Methode (byte-Geraffel) Allgemeine Java-Themen 2
I Hibernate Envers - Aufruf der Methode zum Speichern selbst ausführen oder managen? Allgemeine Java-Themen 0
N rekursion mehrfach eine Methode Öffnen Allgemeine Java-Themen 4
berserkerdq2 Wenn ich eine Methode nur jede 50ms ausführen will, wie mach ich das? Allgemeine Java-Themen 4
berserkerdq2 run-methode eines Threads so programmieren, dass 30x die Sekunde etwas ausgeführt wird. Allgemeine Java-Themen 44
N Schnellste Methode, ein Array durchzugehen? Allgemeine Java-Themen 9
E Methoden abstract static Methode Allgemeine Java-Themen 8
E Eine Methode einer extendeten Klasse deakitivieren Allgemeine Java-Themen 12
F Getter Methode aufrufen funktioniert nicht Allgemeine Java-Themen 1
B In Java Methode mit generic input und output basteln? Allgemeine Java-Themen 4
goldmensch Datentypen Welche Methode hat die bessere Performance? Allgemeine Java-Themen 12
R Lambda Expression in einer Methode execute() aufrufen (execute() ist eine Methode aus dem funktionalen Interface Command) Allgemeine Java-Themen 5
T C++ Methode Übersetzung in Java Allgemeine Java-Themen 3
L Erste Schritte TDD testen einer Methode mit injezierten Services? Allgemeine Java-Themen 12
R @author vor Methode (eclipse) Allgemeine Java-Themen 1
J RotSchwarzBaum: Löschen mittels insert-Methode Allgemeine Java-Themen 20
Y Java Bruttoberechnen + runden Methode Allgemeine Java-Themen 1
R Warum ist die Methode unendlich oft rekursiv? Allgemeine Java-Themen 5
R Methoden Was fehlt mir bzw. muss ich bei der Methode countHarshabNumbers ändern damit ich die Harshad Zahlen im Intervall [51, 79] zählen kann? Allgemeine Java-Themen 19
D ArrayListe delete Methode klappt nicht Allgemeine Java-Themen 12
Drachenbauer Wie finde ich den Aufrufer zu einer Methode, die sich nicht in meinem Projekt befindet? Allgemeine Java-Themen 2
A Ist ein enum hier richtig? Enum toString() Methode. Allgemeine Java-Themen 1
Scream_ilias brute force methode verbessern? Allgemeine Java-Themen 6
Scream_ilias passwort meines pc per brute force methode knacken Allgemeine Java-Themen 4
S static methode im Interface Allgemeine Java-Themen 1
M Konstruktor einer Methode Allgemeine Java-Themen 35
A HashMap Methode "get()"-Problem Allgemeine Java-Themen 28
E Hat der Compiler einen Fehler oder warumbeendet return nicht eine Methode ? Allgemeine Java-Themen 7
T Sinn einer toString Methode Allgemeine Java-Themen 3
T Split() Methode funktioniert nicht?! Allgemeine Java-Themen 11
L Methoden Über Reflections eine Methode mit aufrufen Allgemeine Java-Themen 3
S Kann ich eine Methode schreiben die alle Arten von funktionalen Interfaces akzeptiert..? Allgemeine Java-Themen 21
L ToString-Methode Allgemeine Java-Themen 6
X Datentypen NPE in längerer Methode Allgemeine Java-Themen 12
I Methoden Generics-Methode Allgemeine Java-Themen 3
H Strategy Pattern - changeColor() Methode - input rgd oder hex einlesen Allgemeine Java-Themen 1
T statische Variable und nicht-statische Methode Allgemeine Java-Themen 2
B Aufruf der Methode ergibt eine Exception Allgemeine Java-Themen 13
M Wie kann ich ein int[] Array in einer Methode benutzen? Allgemeine Java-Themen 6
M Wie kann man eine void Methode mit Variablen von zwei verschiedenen Objekten ausführen? Allgemeine Java-Themen 15
F Was ist der Dateityp meines Parameters für die Main Methode. Allgemeine Java-Themen 6
F Variablen Palindromzahl (Probleme mit Methode) Allgemeine Java-Themen 9
B APi methode kurz anhalten Allgemeine Java-Themen 8
P Methode aus anderem Paket aufrufen Allgemeine Java-Themen 1
R Rekursive Methode Allgemeine Java-Themen 8
ReinerCoder Methode einer Klasse meldet Fehler "misplaced construct(s)" Allgemeine Java-Themen 13
R Wo ist mein Fehler in der Methode DRINGEND Allgemeine Java-Themen 9
I Collection - contains-Methode überschreiben (anonyme innere Klasse) Allgemeine Java-Themen 4
E RMI NULL-Pointer-Exeception wenn der RMI-Proxy eine Methode deligiert Allgemeine Java-Themen 2
S Methoden Liste soll Methode aus innerer Klasse aufrufen Allgemeine Java-Themen 4
D HTTP Aufruf einer Methode aus einem Servlet heraus Allgemeine Java-Themen 0
C Threads Methode verhält sich merkwürdig Allgemeine Java-Themen 18
R rekursive und iterative Methode Allgemeine Java-Themen 3
P Methoden Anwendung der allMatch()-Methode Allgemeine Java-Themen 5
G Programm, das nach abgearbeiteter main Methode weiterläuft Allgemeine Java-Themen 72
D Methoden Methode zum Steinschnitt Allgemeine Java-Themen 2
U OOP Warum kann ich aus meiner Methode keinen String auslesen Allgemeine Java-Themen 4
D Returnwert aus einer Methode gerundet ausgeben lassen Allgemeine Java-Themen 2
S equals-Methode bestimmer Klassen abfangen Allgemeine Java-Themen 2
H Methoden Methode 'updateItem' der Klasse 'TreeCell' Allgemeine Java-Themen 3
snipesss Methode greift nicht auf JTextPanel zu Allgemeine Java-Themen 3
R Methode in Methode voraussetzen Allgemeine Java-Themen 8
S Überschriebene Methode der Oberklasse der Oberklasse aufrufen. Allgemeine Java-Themen 5
D Methode dynamisch aufrufen Allgemeine Java-Themen 2
Sogomn Methode als Parameter? Allgemeine Java-Themen 3
M Eigene forEach()-Methode funktioniert nicht. Allgemeine Java-Themen 2
KaffeeFan Methoden Suche Methode um Programm kurz warten zu lassen Allgemeine Java-Themen 22
G Methoden Aus einem Event, wo ich weiß, dass es ausgeführt werden wird, eine Get-Methode basteln Allgemeine Java-Themen 8
BRoll Methode abbrechen (Invoke von außen) Allgemeine Java-Themen 5
I Methode verallgemeinern (Methode als Parameter)? Allgemeine Java-Themen 10
D generische Interface und konkrete Methode Allgemeine Java-Themen 3
G Threads Methode nebenbei ausführen, Status verarbeiten Allgemeine Java-Themen 4
H FTP Befehl/Java Methode für Submit im z/Os (Host) Allgemeine Java-Themen 1
M Fabrik Methode, gutes Beispiel? Allgemeine Java-Themen 0
M WebService - Zugriff auf Webservice Methode über Browser Allgemeine Java-Themen 1
N WaitForScript- methode in javafx Allgemeine Java-Themen 1
2 jede Stunde Methode ausführen Allgemeine Java-Themen 8
M Eine static-Methode verlassen Allgemeine Java-Themen 2
P "Overriden statische Methode" Statische Methode die vererbt wird Allgemeine Java-Themen 5
X Komponente an Methode übergeben Allgemeine Java-Themen 1
A Methode ergibt Java NullpointerException. Allgemeine Java-Themen 3
S Getestete Methode um das Beste aus URL-Nutzereingaben rauszuholen..? Allgemeine Java-Themen 4
L Methoden Methode gibt mir beim verschlüsseln mit RSA 0 bytes aus ? Allgemeine Java-Themen 1
D Methode mit optionalen Parametern in Interface Allgemeine Java-Themen 3
C DBConnection als Methode in mehreren Klassen Allgemeine Java-Themen 4
S Methode funktioniert nicht als ActionListener Allgemeine Java-Themen 4
M Methoden Methode Auslagern Allgemeine Java-Themen 6
P 4 Threads in einer Methode Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben