我正在使用许多getter / setter方法开发一个程序。我被告知我应该在这些方法之外做我的所有逻辑,但我不确定在哪里放。例如,当您可能需要将int转换为字符串或附加字符串时。
我在下面有一个例子,其中唯一应该在getter中的部分是"返回posEntryMode;"。我应该怎么做所有其他逻辑?我在调用方法之前是否只是把它放进去了?
public String getPOSEntryMode ()
{
StringBuilder pos = new StringBuilder();
pos.append(getPanEntryMode());
pos.append(getPinEntryCapability());
posEntryMode = pos.toString();
return posEntryMode;
}
答案 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
操作。具体来说,如果getPanEntryMode
和getPinEntryCapability
的值永远不会改变,您可以执行此操作,这可以使您的代码运行得更快:
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();
}