考虑一个类需要维护它的用例:在两个显式方法中分离行为(启用/禁用)而不是只有一个setter以及何时应该这样做会有什么好处?
1:
private boolean enabled;
public void setEnabled(boolean enabled) {
this.enabled = enabled;
}
2:
private boolean enabled;
public void enable() {
enabled = true;
}
public void disable() {
enabled = false;
}
答案 0 :(得分:-1)
我认为有更好更自然的方式:
private boolean enabled = false;
public boolean isEnabled() {
return enabled;
}
public void setEnabled(boolean enabled) {
this.enabled = enabled;
}
答案 1 :(得分:-1)
我认为第二种方法名称更明确地描述了这个动作,而第一种方法有点含糊不清。
这种旗帜的常见Java模式(虽然我认为这种风格/惯例可能会逐渐消失 - 如果有更多知识渊博的人可以对此有所了解,那将会很有用)是使用isEnabled
和setEnabled()
,它比第一个更明确,但减少了代码中的冗余:
private boolean isEnabled;
private void setEnabled(boolean isEnabled) {
this.isEnabled = isEnabled;
}
我还建议制作方法synchronized
,因为它们将是线程安全的;身体将以原子方式执行,确保在访问旗帜时没有任何令人讨厌的竞争条件。
private boolean flag;
public synchronized void enable() {
flag = true;
}
public synchronized void disable() {
flag = false;
}
提供原子性的另一个选择是,对于需要访问变量的更复杂的方法更有用,是使用AtomicBoolean
来强制其访问器方法中的原子性'实现:
private AtomicBoolean flag;
public void enable() {
flag.set(true);
}
public void disable() {
flag.set(false);
}
本Java教程中讨论了原子变量: http://docs.oracle.com/javase/tutorial/essential/concurrency/atomicvars.html
答案 2 :(得分:-2)
你实际上是在做同样的事情。在我看来,他的第二个选项更好,因为你可以启用/禁用你想要的方法。你检查变量标志,你可以看看你的现有方法是否已经启用。 / p>