setter方法有必要有一个参数吗?通常,setter方法接受一个参数作为Object的某个属性的值.如果我想首先测试依赖于另一个布尔值的参数的有效性,如果是,则首先验证,否则只需设置值.
我通过ftp服务器从客户端获取值.有时这些文件包含垃圾值.例如,#3432838#9等电话号码.所以在我设置值之前,我需要删除那些垃圾字符.我可以在setter方法中做到吗?这是一种有效的方法吗?
提前谢谢!
编辑:
这是有效的:
public void setSomething(String strValue){
if(checkValidity(strValue)){
// set the value
} else {
// set the value to an empty string
}
}
Run Code Online (Sandbox Code Playgroud)
Von*_*onC 12
特别是在java bean框架模型中,它通常不是强制性的.
当它们意图"交换"一个值时,你可以让setter没有参数.
void setCheck()
Run Code Online (Sandbox Code Playgroud)
例如,可以将"check"布尔属性设置为true.
因此,即使它不是java bean意义上的"setter",你也可以想象用于其他目的的setter.
另外,根据JavaBean规范的第7节,setter可以有多个参数,例如Indexed属性(索引属性支持一系列值.每当读取或写入属性时,只需指定一个索引来标识哪个值你要.)
void setter(int index, PropertyType value); // indexed setter
void setter(PropertyType values[]); // array setter
Run Code Online (Sandbox Code Playgroud)
在您的情况下,一种有效的方法是在函数的签名中添加运行时异常.
这样,您就不会对已经调用setter的所有其他类进行任何不必要的编译时异常检查.
或者,您可以将属性视为Constrained属性并添加非运行时异常.
需要约束属性setter方法来支持PropertyVetoException.向尝试更新的受约束属性的用户提供此文档可能被否决.因此,简单的约束属性可能如下所示:
PropertyType getFoo();
void setFoo(PropertyType value) throws PropertyVetoException;
Run Code Online (Sandbox Code Playgroud)
这允许在需要时添加VetoableChangeListener.
关于你的片段,它是"有效的",但可能不是最佳的,因为(如本问题所述):
通过Java Bean规范setter有一个参数.如果你添加另一个,无论出于何种原因,它不再被认为是setter.
Setter完全有效"清理"其参数,或者如果无效则抛出异常.