私は何度も同じようなコードに遭遇します:
class AClass{
private Iterable<String> list;
public AClass(Iterable<String> list){ this.list = list; }
...
}
このコードでは、Iterableの参照がAClassに直接渡されます。最終結果は、リスト参照を外部に直接公開するのと同じです。AClass.listをfinalにしたとしても、AClassの外部からのコードがリストのコンテンツを変更することを許可しますが、これは悪いことです。
これに対抗するために、コンストラクターで防御コピーを実行します。
ただし、この種のコードは非常に一般的です。パフォーマンスの考慮に加えて、人々がこの種のコードを書く意図は何ですか?