setter方法是否仅用于设置属性值,因为它作为参数传递?在将值赋给属性之前,我们可以编写一些验证逻辑吗?
答案 0 :(得分:19)
是的,验证逻辑绝对可以接受。
应该注意的是,如果您有广泛的验证,您可能希望将其提取到特定的验证器服务。但是对于简单的验证,你可以安全地做到这一点。
使用getter& amp; setter是如此,没有人可以直接访问你的领域。如果您只想设置/获取值,可以将它们设为public
。
相反,我们使用setter来验证传入的数据,看它是否符合我们设置的规则。
这个概念也称为“封装”,是面向对象编程的基石。
答案 1 :(得分:8)
是的,您可以在分配值之前在setter属性中添加验证逻辑。实际上,如果可能会将不需要的值发送给setter,则必须执行此操作。
答案 2 :(得分:7)
实际上鼓励验证输入(检查它是否适合您的数据抽象)到您的setter方法,所以是的,你可以。
答案 3 :(得分:6)
不确定。您可以包含验证。这是可以接受的,但不是必要的。您只需要考虑如果您不验证它,那么任何值都将尝试设置为变量(满足数据类型要求)。
基本上如果你有
public void setNickname(String nick)
{
this.nickname = nick;
}
并且您想验证它,您可以在setter中进行验证 - 例如
public void setNickname(String nick)
{
if(nick.matches("[a-zA-Z]+"){ // only letters
this.nickname = nick;
}else{
// react
}
}
在使用之前或在setter之外
if(nick.matches("[a-zA-Z]+"){ // only letters
account.setNickname(nick);
}
或者您可以使用方法来验证它,甚至可以使用单独的验证器类。有很多可能性。
你不必害怕开发人员对此感到眼花缭乱,就像有人说的那样。
答案 4 :(得分:5)
当然,让setter只接受有效值是没有错的。
答案 5 :(得分:3)
只要您不修改其他类字段,验证就是正确的。
您还应该考虑在Joshua Bloh version
中删除setter并在valitation或builder中使用构造函数答案 6 :(得分:2)
绝对没有什么可以阻止你在一个属性的setter中进行任何其他操作。你可以做任何事情,从验证到设置其他财产的价值等等。但是不要说你应该。用你的良好判断力和常识来决定放在那里的东西。如果使用无数代码行填充setter,那么你应该质疑你的程序结构......