これはEffective Javaでの防御コピーの例です。私の根底にある質問のシナリオには防御的なコピーが必要であり、渡されたオブジェクトの変更を避けるようにクライアントに要求するコメントには対応できないと仮定します。
public Period(Date start, Date end) {
this.start = new Date(start.getTime());
this.end = new Date(end.getTime());
}
質問:
Date
自分自身をより一般的にするために、自分自身を取り込むコンストラクターがなく、オブジェクトが渡され、それ自体を複製するメカニズムがなく、そのようなオブジェクトが私たちに属していない場合、つまり、変更できない場合はどうすればよいですか?コンストラクターが型パラメーターを引数として取り
Period(T object)
、T が変更可能である可能性があるため、防御コピーが必要な場合はどうなりますか。Tが何であるかはわかりません。この場合、防御的コピーを行うにはどうすればよいですか?Date
一部のサブクラスにはそれ自体のオブジェクトを作成するようなコンストラクターがあり、一部のサブクラスにはそうするメカニズムがない場合に渡されるインターフェイスとは何ですか?どのくらいの深さまで防御的にコピーする必要がありますか? 配列をコピーするとしましょうが、配列要素は変更可能でしたか?