可能重複:
Why use getters and setters?爲什麼更喜歡getter和setter方法而不是公開?
是的,這是一個非常簡單的事情,但我沒有找到的一個很好的振振有辭。我知道製作一個變量private並提供getter來讓setter訪問這個變量是一個好習慣。除此之外,還有什麼理由嗎?
可能重複:
Why use getters and setters?爲什麼更喜歡getter和setter方法而不是公開?
是的,這是一個非常簡單的事情,但我沒有找到的一個很好的振振有辭。我知道製作一個變量private並提供getter來讓setter訪問這個變量是一個好習慣。除此之外,還有什麼理由嗎?
查找「封裝」和「信息隱藏」。
基本上,一個類管理數據並提供對它們的操作/提供對它們的訪問,但數據的內部表示應該保持對類的私有表示。像這樣,一個類可以改變其內部表示而不會破壞其他代碼。
E.g.考慮:
A)
public Date date;
B)
private Date date;
public Date getDate(){...}
public setDate(Date date){...}
後來您選擇使用日曆而不是日期。在情況A)你不能改變數據類型而不破壞代碼。
在情況B),你可以這樣做:
private Calendar calendar;
public Date getDate(){...}
public setDate(Date date){...}
public Calendar getCalendar(){...}
public setCalendar(Calendar calendar){...}
可以提供在get /的setDate方法轉換。客戶端代碼不會中斷。
有時你想使用getter和setter的另一個原因是使用庫/
框架,其底座上的JavaBeans模式。
如果將變量保留爲public,則無法確保該對象保持一致狀態。在你的製片人中,你可以例如進行一些檢查,例如,避免將負數設置爲年齡。
如果你有公共變量,例如可能有監聽器,因爲監聽器通常使用通過setter設置變量的通知。直接更改公共變量時,沒有機會跟蹤更改。
這些是一些非常基本的例子,但可以肯定地發現。
有很多原因。這是一種控制訪問(訪問者)到你的班級內部工作的方式。有時例如,您可能希望getter將對象或setter的克隆返回給私有對象上的值,而不是將該處理器指向傳遞給setter的新對象。另一個原因是在獲取或設置對象之前或之後執行某些操作而不公開此功能。
概括起來:
使用它們僅在需要時,雖然。
絕對要求和回答。深入。 :-) – 2011-02-07 11:50:06