Liste zurückgeben oder durch Referenz ändern

9

In Java habe ich eine Methode, die den Inhalt einer Liste ändert. Ist es besser zu verwenden:

%Vor%

Oder ist es besser, Folgendes zu tun:

%Vor%

Hinweis - Der einzige Unterschied zwischen den beiden Methoden ist der Rückgabetyp (eine Funktion gibt void zurück und die andere gibt eine Liste zurück).

    
David 20.11.2013, 15:23
quelle

5 Antworten

1

Alles hängt davon ab, wie Sie List verwenden - wenn Sie eine Art Liste implementieren und dies die nicht-statische Methode Ihrer List -Klasse ist, sollten Sie

schreiben %Vor%

oder

%Vor%

Wenn es eine Methode außerhalb dieser Klasse ist

Über die Durchführung von Operationen auf der Liste oder ihrer Kopie: Sie sollten das gewünschte Verhalten und Ihre Erwartungen berücksichtigen - das Wichtigste - Brauche ich eine "alte" Listenkopie? . Tiefe Kopierliste kann ein wenig Overhead sein. Eine flache Kopie kann keine Operationen für bestimmte Elemente der Liste ausführen (d. H. Ihre Attribute ändern - wenn sie Objekte sind), ohne die "alte" Liste zu beeinflussen.

Über das Zurückgeben von void: Es ist eine gute Übung, eine geänderte Liste (oder zumindest eine Anzahl von geänderten Elementen) zurückzugeben, die es Ihnen ermöglicht, Methodenaufrufe zu verketten. Wenn sie nicht benötigt werden, können Sie sie immer ignorieren.

    
Maciej Dobrowolski 20.11.2013, 15:35
quelle
1

Wenn Sie nur die Liste manipulieren, hängt das ganz von der Stimmung ab. Einige Leute (einschließlich mir) argumentieren, dass es einfacher ist, Code mit der ersten Option zu lesen (und es ermöglicht eine Verkettung, wie von Adam hervorgehoben, wenn Sie so etwas wollen).

Beachten Sie jedoch, dass es nicht wirklich eine Referenz ist, die übergeben wird. Es ist ein Zeiger wirklich. Daher, wenn Sie die originalList-Instanz aus irgendeinem Grund erneut initialisieren, z. B. indem Sie ein

setzen %Vor%

in Ihrem Methodenkörper. Dies wirkt sich nicht auf die Liste aus, die Sie tatsächlich an die Methode übergeben haben.

    
JustDanyul 20.11.2013 15:30
quelle
1

Meiner Meinung nach sollten Sie nur Methodenketten mit unveränderlichen Klassen fördern.

Wenn Ihre Funktion ein Objekt mutiert, ist es zu einfach, es versehentlich in einer Kette von Methoden zu tun.

    
OldCurmudgeon 20.11.2013 15:35
quelle
1

Ein möglicher Vorteil von Option 1 ist, dass eine null -Liste akzeptiert werden kann. Wenn Sie beispielsweise Foos sammeln und im Allgemeinen eine brandneue Liste erstellen, möchten Sie jedoch, dass die -Option zu einer vorhandenen -Liste hinzugefügt wird. z.B. (Notieren Sie auch den Namen der Methode)

%Vor%

und, wenn Sie möchten, fügen Sie auch eine explizite no-arg "get" -Methode hinzu

%Vor%

Nun können Sie in Option # 2 eine neue, leere ArrayList erstellen und diese übergeben, aber Option # 1 ist bequemer. d. h.

Option 1 Verwendung:

%Vor%

Option 2 Verwendung:

%Vor%     
user949300 20.11.2013 16:46
quelle
0

Da List veränderbar ist, ist die zweite Methode besser. Sie müssen die geänderte List nicht zurückgeben.

    
Masudul 20.11.2013 15:25
quelle

Tags und Links