2010-06-14 97 views
1

可能重複:
Public Data members vs Getters, Setters
Purpose of private members in a class吸氣劑和吸附劑的用途?

用的是什麼getter和setter時,你可以讓你的變量公衆和避免這種線的麻煩,爲A.setVariableX(A.getVariableY())

+0

可能的重複:http://stackoverflow.com/questions/2903385/property-and-encapsulation – Paolo 2010-06-14 08:15:55

+0

就這麼你知道,我在我的程序中首先實現了getters和setters,就像簡單(當時的imo,沒用)函數來改變或檢索變量,但是在拋出異常的調試過程中,它們變成了救命稻草。我不明白如果調試是公開的,調試會如此簡單:) – wrongusername 2010-06-15 20:21:17

回答

11

隱藏實現細節。如果你選擇公開你的屬性,然後決定改變他們的工作方式,你必須改變所有相關的代碼。

通過getter和setter,您可以在不更改可見API的情況下更改內部實現細節(從而避免必須更改使用相關類的API的任何代碼)。

0

它是封裝原理的一部分。您使用setter和getters作爲接口來與對象進行交互,以便您可以 - 例如 - 稍後添加任何功能(如驗證輸入數據)而不觸及使用類的代碼。

3

獲取者和設置者可以進行驗證和懶惰實例化,而公共成員則不能。另外,這不是語言不可知的,因爲大多數實現屬性的語言都將實現抽象出來,以使它們看起來像代碼中的公共成員。

+0

奇怪的是,99%的setter/getters不是用於驗證或延遲初始化的......儘管這個Java是關於它們的。 ..看看Pojo豆......確實,使用IDE幫助他們根本不打擾開發者,但仍然......這與Reflection沒有關係......只涉及到它的事情是Proxying,它需要setter /干將 – lisak 2011-06-17 21:44:47

3

因爲有時你的變量可能會有一些限制,當你設置它時必須檢查它是否有意義。例如,如果您的年齡不允許爲-1,您可以在您的設置器中檢查該年齡。

if(value >= 0) 
{ 
    _age = value; 
} 
else 
{ 
    throw new InvalidAgeException("Age may not be less than 0"); 
} 
2

安裝程序和getter應用於屬性,無論您的代碼中有哪些「屬性」。

例如,您可以有一個angle變量,該變量存儲以弧度表示的角度值。您可以使用任何您認爲相關的角度單位爲該變量定義setter和getters。