MaverinCode:
私はこの方法でメソッドPARAMATERS(オブジェクトである)変異について質問があります。
私はのparamaterとして渡された方法でオブジェクトを変異させるための悪い習慣であることを複数回読んで聞きました。例として:
public void modifyList(List<Object> list) {
list.add(new Object());
}
代わりに、コピーする必要がオブジェクトに渡された、突然変異は、コピーされたオブジェクトに対して実行されなければならないとコピーされたオブジェクトが返されます。例として:
public List<Object> getModifiedList(List<Object> list) {
List copy = new List<Object();
//Make a deep copy if it would be necessary
for(Object o : list) {
copy.add(o.clone());
}
//Modify the copy
copy.add(new Object());
//return the copy
return copy;
}
私はそれが入力パラメータを変化させませんので、第2の方法は、副作用の少ない可能性があることを理解しています。
しかし、これは移動するための方法は本当にありますか?深いcopysの多くを作成する必要があるため、パフォーマンスが低下します。また、それはコピーコンストラクタを実装する多くの時間を要し、すべてのクラスのクローンメソッドを実装します。また、それはLOCの広大を増加させます。
実際に私は頻繁に(メソッドパラメータをコピーする)このパターンは表示されません。
(年間のプログラマ/ソフトウェア開発者として働いて)多くの経験を持つ誰かがこれを答えることができますか?
ご挨拶Maverin
assylias:
どちらの方法でも大丈夫ですし、あなたのユースケースに応じて、正しい選択である可能性があります。ちょうどあなたが意図明確になるように、それらを名前を付け、いくつかのJavadocを書くことを確認してください。
これは、変異した元のリストを持つことがOKであるか、そうでない場合、コピーを渡すか、別の方法を使用するかどうかを決定するために、開発者に、その後次第です。
例えば、この方法 JDKが突然変異から既存のリストが、その意図とドキュメントは非常に明確です。