2013-02-02 340 views
-1

當我有一個變量,如exampleVariable,我應該使用getExampleVariable()setExampleVariable(Object value)並使exampleVariable私人而不是ExampleClass.exampleVariableExampleClass.exampleVariable = exampleObject;何時使用getter和setter?

即使getter和setter除了設置變量之外,我通常都會使用getter和setter。

+0

是的。封裝決定了這個原理 – Dan

+7

[Pick](http://stackoverflow.com/questions/565095/are-getters-and-setters-evil?rq = 1)[和](http://stackoverflow.com/questions/875033/getters-setters-in-java?rq=1)[選擇](http://stackoverflow.com/questions/875033/getters- setters-in-java?rq = 1)[a](http://stackoverflow.com/questions/10407877/what-is-the-point-of-getters-and-setters?lq=1)[重複]( http://stackoverflow.com/questions/1461598/what-is-the-point-of-setters-and-getters-in-java?lq=1)[question](http://stackoverflow.com/questions/ 11883454 /必要的吸氣劑方法?lq = 1)! – eboix

+0

@丹雖然有人會將這個原理稱爲「信息隱藏」。 – Scooter

回答

0

1)只有在需要的時候才使用getter和setter。例如,如果變量不需要被外界讀取和寫入,則不需要創建/生成getter和setter。類似地,如果外部世界只應讀取變量,那麼getter應該被定義爲不設置。

2)「即使getter和setter除了設置變量也沒有做任何事情」:getter和setters中不應該有業務邏輯。他們存在的主要原因是設置變量或變量。

0

是的,因爲這有助於抽象,並使代碼易於維護。例如,如果你想以某種方式來獲取exampleObject,那麼保持字段並返回它,並且你不使用getter和setter,那麼改變一切將是一件痛苦的事情。

1

我不打算開始火焰戰。許多人認爲,無論使用什麼類,都應該使用setter和getter。 Getters和setter允許在不更改API的情況下向類添加額外的邏輯。可以添加方面等。

我個人更喜歡更實用的方法:除非您正在編寫庫,否則不要編寫getter和setter,如果您不需要額外的邏輯。一旦你需要它,將普通成員重構爲getter和setter代碼非常簡單。

1

我覺得這有點反過來。我班的對象是否有外部gettable屬性?如果是這樣,將會有一個getSomething方法。不太常見,該屬性需要外部修改,需要使用setSomething方法。

很常見但並非總是最簡單最好的表示屬性的方法是私有變量something

0

Getters和setter並不總是直截了當,特別是在編寫庫API時。讓我們考慮一下你從一個公開訪問變量的api開始的情況。如果您希望稍後在設置該變量之前執行一些操作,則必須將其更改爲getter或setter模式。這將打破每個使用你的api的人。如果你從getter和setter開始,那麼api不會改變。你可以寫下你的改變。

這是我在編寫新課程時使用的一般規則。

你相信有人會想要訪問這個實例變量嗎?如果是這樣,那麼創建一個getter。如果你不想讓某人改變那個對象,那麼創建一個防禦副本。 1(我會默認始終創建一個防禦副本)。

人們應該在整個一生中改變實例嗎?如果是這樣,那麼創建一個setter。還要證明這個類不是線程安全的,可能會隨着時間而改變。如果對象不應該改變,那麼使實例變量最終並確保它是不可變的。