在 java bean 框架模型中是特别需要的,但一般不是强制的。
当 setter 旨在“交换”一个值时,您可以使用不带参数的 setter。
void setCheck()
例如,可能意味着将“检查”布尔属性设置为 true。
因此,即使它不是 java bean 术语意义上的“setter”,您也可以想象 setter 用于其他目的。
另外,根据 JavaBean 规范的第 7 节,setter 可以有多个参数,例如对于索引属性(索引属性支持一系列值。每当读取或写入属性时,您只需指定一个索引来标识哪个值你要。)
void setter(int index, PropertyType value); // indexed setter
void setter(PropertyType values[]); // array setter
在您的情况下,一种有效的方法是将运行时异常添加到我们函数的签名中。
这样,您就不会对已经调用您的 setter 的所有其他类进行任何不必要的编译时异常检查。
或者您可以将您的属性视为约束属性并添加非运行时异常。
支持 PropertyVetoException 需要受约束的属性设置器方法。对试图更新的受约束财产的用户来说,该文件可能会被否决。所以一个简单的约束属性可能看起来像:
PropertyType getFoo();
void setFoo(PropertyType value) throws PropertyVetoException;
如果需要,它允许添加 VetoableChangeListener。
关于您的代码段,它是“有效的”,但可能不是最佳的,因为(如本问题所述):
- 验证应该与验证方法中的getter 或 setter 分开捕获。这样,如果需要跨多个组件重用验证,它是可用的。
- 最好快速失败(因此我建议向 setter 添加异常)。