特にJavaBeanフレームワークモデルでは必要ですが、一般的には必須ではありません。
値を「変更」することを意図している場合は、引数なしでセッターを使用できます。
void setCheck()
たとえば、「check」ブール属性をtrueに設定することを意味する場合があります。
したがって、Java Beanという用語の意味での「セッター」でなくても、他の目的で使用されるセッターを想像することができます。
さらに、JavaBean仕様のセクション7によると、たとえばインデックス付きプロパティの場合、セッターは複数の引数を持つことができます(インデックス付きプロパティは値の範囲をサポートします。プロパティの読み取りまたは書き込みを行うときは常に、インデックスを指定してどの値を識別するかを指定するだけです。あなたが欲しい。)
void setter(int index, PropertyType value); // indexed setter
void setter(PropertyType values[]); // array setter
あなたの場合、有効なアプローチは、関数のシグネチャにランタイム例外を追加することです。
そうすれば、すでにセッターを呼び出している他のすべてのクラスに対して、不要なコンパイル時の例外チェックを行う必要がありません。
または、プロパティを制約付きプロパティと見なして、実行時以外の例外を追加することもできます。
PropertyVetoExceptionをサポートするには、制約付きプロパティセッターメソッドが必要です。このドキュメントは、更新を試みたことが拒否される可能性があるという制約付きプロパティのユーザーに提供されます。したがって、単純な制約付きプロパティは次のようになります。
PropertyType getFoo();
void setFoo(PropertyType value) throws PropertyVetoException;
これにより、必要に応じてVetoableChangeListenerを追加できます。
スニペットに関しては、「有効」ですが、(この質問で述べたように)次の理由で最適ではない可能性があります。
- 検証は、検証メソッドでゲッターまたはセッターとは別にキャプチャする必要があります。そうすれば、検証を複数のコンポーネントで再利用する必要がある場合に利用できます。
- 早く失敗する方が良いです(したがって、セッターに例外を追加するという私の提案)。