我想知道爲什麼要在java中使用getter和setter方法。如果您可以通過getter和setter讀取或修改私有字段的值,爲什麼不直接將它們更改爲public?我知道獲得者和制定者必須是合理的,但直接的答案是不可能放棄他們呢?java中的訪問器
回答
一些原因是:
- 您可以添加額外的約束和檢查。例如,如果特定的整數屬性必須在[10..20]的範圍內,則可以輕鬆地將檢查添加到
setter
以確保該屬性上未設置其他值。 - 只能通過提供
getter
來使其成爲「只讀」。 - 您可以在setter上輕鬆設置源斷點,以查看該值何時以及從何處被修改。
- 您可以輕鬆地添加日誌記錄以跟蹤哪些值已設置。
查看答案由@Aditi爲其他原因所提供的鏈接:Why use getters and setters?
3.您可以添加日誌記錄以確定何時設置值。 – GSP 2013-02-21 13:33:10
@GSP非常有效的點,添加到列表中 – 2013-02-21 13:34:49
一個錯誤追查中最難的形式是在一個數據項的值的意外,不適當的變化。
如果數據是公開的,則更改的代碼可能在程序中的任何位置。
如果它是私有的,那麼進行更改的代碼必須位於同一個源文件中,通常是同一個類。很容易找到並測試所有可能改變它的代碼,包括它的setter。
將字段私有化以保留Java類中的封裝是一種很好的做法。應用程序中的任何內容都不應該知道類的「內部」,這是實現細節。他們唯一需要訪問的是對象上的方法,以請求值或執行進程。
在某些情況下,您可能想要將某些內部值賦予另一個類。在這種情況下,建議通過吸氣劑來完成,而不是直接完成。這樣,當您需要更改該類的合同和/或其實現細節(如何在內部存儲值)時,重構將變得更容易。
此外,由於這是使用getters/setters的常見模式,因此這會使您的代碼更易於被外部讀者或同事讀取,並且某些第三方庫期望它們在那裏。
通過使用getters和setter來代替直接訪問成員變量,我們可以做數據驗證。
例如,
public void setAge(){
if(age < 0){
//throw exception
}
}
這是將接口與實現(1)分開併爲變更做準備(2)的方式。也許簡單的例子可以幫助。
(1)
假設您有一個用戶將firstName和secondName存儲在單獨的字段中。現在,您可以使用getFullName方法連接fisrtName和secondName,但使用User類的程序員不必知道firstName和secondName是兩個單獨的字段。
(2)
現在,您想要在一個字段中存儲用戶類fullName,所以您只需在User類中進行更改,而不必調用getFullName方法的所有調用,您如果您直接使用字段,則必須採取措施。
- 1. 覆蓋Java中的訪問器
- 2. 在Java中的訪問器,援助?
- 3. 訪問Java中沒有公共訪問器的私有成員
- 4. 訪問java中的對象
- 5. 訪問Java中的包
- 6. Java中的全局訪問
- 7. Java中的'空指針訪問'問題
- 8. 如何獲得在Java中訪問谷歌驅動器的訪問令牌?
- 9. Java訪問Shellfolder
- 10. Java類訪問
- 11. 在java中訪問$ {request.remoteUser}
- 12. 如何訪問Java中
- 13. 如何訪問在java中
- 14. 如何訪問在java中
- 15. 在Java Webapp中訪問SQLite
- 16. 在Java中訪問MidiDevice
- 17. Java中Singleton併發訪問
- 18. 從適配器Java代碼訪問UserIdentity
- 19. Kotlin沒有看到Java Lombok訪問器?
- 20. Java:從FTP服務器訪問文件
- 21. 通過服務器訪問變量(Java)
- 22. Java訪問器/ Mutator - >屬性名稱
- 23. Java不繼承訪問器方法?
- 24. 生成javascript訪問器到java beans
- 25. 訪問器方法和Java反射
- 26. 從java中的類中訪問數組
- 27. 訪問Java WebStart中的類的權限
- 28. 表的訪問 - SQL(Java)的
- 29. 訪問過濾器中的params.id問題
- 30. 訪問Java應用程序中的記錄器
這是根據OOP。你設置訪問它們的規則。沒有這些規則,任何人都無法訪問它們。 – Arpit 2013-02-21 13:31:47