次の手順でクラスを不変にする方法をすでに読んでいる
- 「セッター」メソッド(フィールドまたはフィールドによって参照されるオブジェクトを変更するメソッド)を提供しないでください。
- すべてのフィールドをファイナルでプライベートにします。
- サブクラスがメソッドをオーバーライドすることを許可しないでください。これを行う最も簡単な方法は、クラスをfinalとして宣言することです。より洗練されたアプローチは、コンストラクターをプライベートにし、ファクトリメソッドでインスタンスを構築することです。
- インスタンスフィールドに可変オブジェクトへの参照が含まれている場合は、それらのオブジェクトを変更できないようにします
。可変オブジェクトを変更するメソッドを提供しないでください。
b。可変オブジェクトへの参照を共有しないでください。コンストラクターに渡された外部の可変オブジェクトへの参照は絶対に保存しないでください。必要に応じて、コピーを作成し、コピーへの参照を保存します。同様に、メソッドで元のオブジェクトが返されないようにするために、必要に応じて内部の可変オブジェクトのコピーを作成します。
不変性のコンテキストでのプライベートコンストラクタとファクトリメソッドの有用性を明確に理解しているのかわかりません。クラスをfinalにすると、基本的に、それを拡張する他のクラスのすべてのパスを閉じます。より洗練されたアプローチはどのように述べられていますか
プライベートコンストラクター、意味のあるシングルトンパターンのファクトリメソッドを見てきました。しかし、オブジェクトの不変性について話すとき、プライベートコンストラクターと静的ファクトリメソッドについて言及するときに、オブジェクトの構築/インスタンス化も制限していますか?