Javaに関しては、そのようなプロパティをどのように動作させますか? オブジェクトを不変にする手法はすでに存在しますが、これは間違いなくこれを達成するためのより良い方法であり、追加の利点があります。実際、状態を変更しないメソッドのみを実装するスーパークラス/スーパーインターフェースを宣言し、変更メソッドを実装するサブクラス/サブインターフェースを持つことで、const の動作をエミュレートできます。変更可能なクラスを書き込みメソッドのない class のインスタンスにアップキャストすることにより、他のコードは、特に変更可能なバージョンにキャストし直さない限り、オブジェクトを変更できません (これは をキャストすることと同じですconst
)。
オブジェクトを厳密に不変にしたくない場合でも、本当に必要な場合 (これはお勧めしません)、ある種の「ロック」モードをオブジェクトに設定して、ロックが解除されたときにのみ変更できるようにすることができます。ロック/ロック解除メソッドをプライベートにするか、必要に応じて保護すると、ある程度のアクセス制御が得られます。または、メソッドがそれをパラメーターとして使用して変更することをまったく意図していない場合は、そのオブジェクトのコピーを渡すか、オブジェクト全体をコピーすると重量が大きすぎる場合は、必要なだけを含む他の軽量データ オブジェクトを使用します。情報。動的プロキシを使用してオブジェクトへのプロキシを作成し、ミューテーション メソッドの呼び出しをノーオペレーションにすることもできます。
基本的に、クラスが変更されるのを防ぐ方法はすでにたくさんあり、状況に最も適した方法を選択できます (ヒント: オブジェクトを自明にスレッドセーフにし、一般的に推論しやすくするため、可能な限り純粋な不変性を選択してください) )。これらの手法を改善する実装方法についての明白なセマンティクスはありませんconst
。柔軟性に欠けるか、柔軟性がありすぎて役に立たないことを学ぶことは別のことです。
つまり、私が何かを見逃していない限り、それは完全に可能です. :-)