我可以在setter方法中编写验证逻辑吗?

时间:2013-12-04 14:33:07

标签: java oop encapsulation

setter方法是否仅用于设置属性值,因为它作为参数传递?在将值赋给属性之前,我们可以编写一些验证逻辑吗?

7 个答案:

答案 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,那么你应该质疑你的程序结构......