如何从getter / setter中删除逻辑?

时间:2015-08-20 15:40:01

标签: java methods getter-setter

我正在使用许多getter / setter方法开发一个程序。我被告知我应该在这些方法之外做我的所有逻辑,但我不确定在哪里放。例如,当您可能需要将int转换为字符串或附加字符串时。

我在下面有一个例子,其中唯一应该在getter中的部分是"返回posEntryMode;"。我应该怎么做所有其他逻辑?我在调用方法之前是否只是把它放进去了?

public String getPOSEntryMode ()
{
    StringBuilder pos = new StringBuilder();
    pos.append(getPanEntryMode());
    pos.append(getPinEntryCapability());
    posEntryMode = pos.toString();
    return posEntryMode;
}

2 个答案:

答案 0 :(得分:1)

不一定是你应该在getter / setter方法之外做所有的逻辑。

在其他地方做逻辑的主要原因是避免意外后果。

考虑以下示例:

public class MyClass {
  private int x;
  private final String name;

  public int getX() {
    return x;
  }

  public String getName() {
    x++;
    return name;
  }
}

看看这里发生了什么?您有获取名称的方法,但会更改x的值。您的代码现在让以后阅读它的人感到困惑; x的价值变化是一种意想不到的后果。

所有这一切,你问题中的代码就好了。我唯一能做的就是缓存它的价值,所以你没有一遍又一遍地执行相同的String操作。具体来说,如果getPanEntryModegetPinEntryCapability 的值永远不会改变,您可以执行此操作,这可以使您的代码运行得更快:

private String cachedPOSEntryMode = null;

public String getPOSEntryMode ()
{
  if(cachedPOSEntryMode == null) {
    StringBuilder pos = new StringBuilder();
    pos.append(getPanEntryMode());
    pos.append(getPinEntryCapability());
    cachedPosEntryMode = pos.toString();
  }
  return posEntryMode;
}

答案 1 :(得分:0)

Angela,基本上就是这个意思:

有另一个名为calculatePOSEntryMode的方法:并执行类似下面的操作

private String calculatePOSEntryMode(){
    StringBuilder pos = new StringBuilder();
    pos.append(getPanEntryMode());
    pos.append(getPinEntryCapability());
    posEntryMode = pos.toString();
    return posEntryMode;
}

public String getPOSEntryMode ()
{
    return calculatePOSEntryMode();
}