これがまさに、オブジェクト フィールドを広い世界全体に公開するのではなく、セッターを使用する理由です。
0 から 359 までの整数の角度を保持するクラスを考えてみましょう。
フィールドを公開すると、関数を呼び出すことで必要に応じてフィールドを設定でき、API で指定されたコントラクトが破られます。また、コードがその変数の特定の範囲を想定して記述されているため、機能が途中で壊れる可能性もあります。
セッターを使用すると、さまざまなことができます。1 つは、無効な値が渡されたことを示すために例外を発生させることですが、それは私の見解では正しくありません (この場合)。次のように、入力値を 0 から 359 の間の値に変更すると、より便利になる可能性があります。
actualVal = passedValue % 360;
これがインターフェイス (API) で指定されている限り、完全に有効です。実際、指定しなくても、呼び出し元が (範囲外の値を渡すことによって) コントラクトに違反しているため、自由に好きなことを行うことができます。私は「できるだけ早く入力をサニタイズする」というルールに従う傾向があります。
特定のケースでは、文字列がトリミングされた形式で保存されることを指定している限り、発信者が文句を言う理由はありません (そのような文字列は無効であると既に述べています)。セッターを呼び出すすべてのコードで行うよりも、セッターで実行する方が、コード サイズ (速度ではなく) の点で優れています。また、文字列が期待どおりに格納されることも保証します。呼び出し元がトリミングされていない文字列を誤って (または意図的に) 格納しないという保証はありません。