2015-10-14 46 views
3

考慮一個類需要維護其啓用的用例:在兩個顯式方法(啓用/禁用)中隔離行爲的優點是什麼,而不是隻有一個設置器,我應該在什麼時候執行?實現類啓用

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; 
} 
+3

第二個選項看起來像一個有效的方法,恕我直言。 –

+4

第一個版本比較好,但是命名爲'setEnabled(boolean enabled)'會更有意義 – erosb

+2

1.第一種方法就像是切換變量的狀態,其中方法是精確啓用或禁用布爾的狀態 –

回答

-1

我認爲這是一個更好,更自然的方式:

private boolean enabled = false; 

public boolean isEnabled() { 
    return enabled; 
} 

public void setEnabled(boolean enabled) { 
    this.enabled = enabled; 
} 
+3

我會調用變量'enabled'和setter'setEnabled'。這比「isEnabled」作爲變量名更有意義。 –

+0

我同意@OlivierGrégoire的觀點 –

+0

@OlivierGrégoire你是對的。我編輯過。 –

-2

你實際上是在做同樣的thing.In我看來,他第二個選項是更好,因爲你可以啓用/禁用方法,你want.You檢查變量標誌,你可以看到你的現有方法是否已經啓用。

+0

*「您可以啓用/禁用您想要的方法」*您如何啓用/禁用某種方法?你也可以用第一種方法檢查變量。 – fabian

-1

我要說的第二個作爲方法名被更明確地描述的動作,而首先是有點曖昧。

對這種標誌的通常的Java模式(雖然我覺得這種風格/慣例可外出時尚的 - 將是有趣的,如果有人更瞭解可以給一些這方面的見解)是使用isEnabledsetEnabled(),這是比第一個更明確的,但在代碼減少冗餘:

private boolean isEnabled; 

private void setEnabled(boolean isEnabled) { 
    this.isEnabled = isEnabled; 
} 

我也建議製作方法​​,因爲他們隨後將是線程安全的;機體將以原子方式執行,確保在進入國旗時沒有任何惡劣的競賽條件。

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

+0

如果你使用'AtomicBoolean',你必須使用對象的'set'和'get'方法。您不能將布爾值分配給AtomicBoolean對象引用(AutoBoxing僅適用於布爾封裝類)。 –

+0

啊,我認爲自動裝箱也會應用於'布爾'的子類。謝謝,@DavidSN,我現在就改變它。 –

+1

'AtomicBoolean'不是'Boolean'的子類。所有原始類型的包裝類都是final的,所以它們不能被子類化。 –