定义setter返回值

时间:2011-12-01 02:44:31

标签: encapsulation setter getter

我的一个项目中遇到了问题。也许我对封装有错误的概念。 封装通过定义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;
}

可以吗?这样我就可以知道是否真的发生了变化。

1 个答案:

答案 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中,以使您的设计更加清晰。