2016-09-04 3 views
2

属性を返し、その値を変更または「リセット」するより洗練された方法があるのだろうかと疑問に思っています。これは今まで私が行ってきた方法です:リストを返却してクリアするには?

[...] 

final List<T> copyOfOriginal = new ArrayList<T>(original); 
original.clear(); 

return copyOfOriginal; 

[...] 

本当にリスト全体をコピーする必要がありますか?元の参照を戻しながら1は、単に新しい空の1でリストを置き換えることができます。多くの場合

+1

Arraylistを複製しようとしている場合、これは問題ありません。これを必要とする実際の問題は何ですか? –

+0

@ cricket_007クローンを作成せずにリストをクリアしたいのですが、これはとても簡単です(NPEの回答を参照) –

+0

「オリジナル」とは何ですか?それはメソッドのパラメータか、クラスのフィールド(またはその両方)ですか? – Pshemo

答えて

5

final List<T> ret = original; 
original = new ArrayList<T>(); 
return ret; 

ここでの注意点は、これは、元の参照を変更することです。複数のコピーがある場合、これには特別な注意が必要です。

+0

これはかなりシンプルです...私はこれで自分自身を思い付くことはできませんでした:P –