我的一个项目中遇到了问题。也许我对封装有错误的概念。 封装通过定义getter和setter方法来保护成员变量和类,现在,我正在读取setter必须为void,但在这种情况下,我怎么知道函数是否真的设置了参数传递的值。例如
void setArea(int a) {
if(a>0)
Area = a;
}
我如何确定参数“a”是正确的值,不能更好地定义这样的函数
bool setArea(int a) {
if(a>0) {
Area = a;
return true;
}
return false;
}
可以吗?这样我就可以知道是否真的发生了变化。
答案 0 :(得分:1)
我认为您正在寻找的是guard clause如果设置了无效值则抛出异常:
void setArea(int a) {
if (a <= 0) throw new InvalidArgumentException(...);
Area = a;
}
但是,如果您希望客户端代码在设置之前测试无效值,您可以这样做:
bool isAreaValid(int a) {
return a > 0;
}
void setArea(int a) {
if (!isAreaValid(a)) throw new InvalidArgumentException(...);
Area = a;
}
客户端可以这样编码:
if (obj.isAreaValid(myArea)) {
obj.setArea(myArea);
}
但不要止步于此。如果区域的概念很重要,请将其存在于自己的value object中,以使您的设计更加清晰。