從C#背景來看,我們使用屬性來獲取不需要很長時間的東西,如果需要花費很長時間(msdn link),則使用getX
方法。在Java中,由於沒有屬性,您是否在兩種情況下使用getX
,或者是否存在其他約定來指示從不太快速的訪問(除了記錄文件)快速訪問?什麼時候使用getX方法
編輯: 比如你會使用不同的命名約定耗時像數據庫訪問GET操作或同時使用getX
命名約定?
從C#背景來看,我們使用屬性來獲取不需要很長時間的東西,如果需要花費很長時間(msdn link),則使用getX
方法。在Java中,由於沒有屬性,您是否在兩種情況下使用getX
,或者是否存在其他約定來指示從不太快速的訪問(除了記錄文件)快速訪問?什麼時候使用getX方法
編輯: 比如你會使用不同的命名約定耗時像數據庫訪問GET操作或同時使用getX
命名約定?
通常getX()
方法被認爲是快速訪問方法和數據庫支持的方法應該是沿着這些線路findX()
或loadX()
或東西,但據我知道有沒有對其進行全球性協議。即使是「吸氣者應該是快速的」規則有時也不被遵守。
這要看情況,你在做什麼 - 例如,你可以使用loadX
,fetchX
,computeX
- 或有時只是getX
爲正常的「便宜」的特性。
getX
約定來自JavaBean規範。最近,使用POJOs(普通Java對象)變得非常流行,因爲許多框架使用getter和setter來操縱你的對象,包括Spring和Hibernate。
更具體地:
getX
用於nonboolean X
器(getter)isX
爲一個布爾X
器(getter)setX
用於X
(設定部)的任何值如果你不會使用一個需要使用POJO的框架,那麼通過一切手段給你的方法命名,讓你知道他們乍一看。
我知道布爾返回類型的`isX`。我的重點更多的是基於訪問速度的命名,而不是返回類型。換句話說,如果它需要一些時間來處理,它應該仍然是`getX`。 – Cornelius 2011-01-19 14:29:00
作爲一個經驗法則,創建一個專用成員字段,用於本地訪問您的屬性以及一個用於外部訪問的getter/setter。
許多第三方庫如Spring依賴公共方法進行依賴注入(控制反轉)和麪向方面編程,因此使用getter/setter可以促進這種編程風格。
例如,Spring可能用於將兩個對象關聯在一起。或者你也可以使用AOP將一些緩存行爲放在一個比較昂貴的get操作上。
它還允許您在更改或檢索屬性時設置斷點,添加可用於調試的日誌記錄等。
在Java中,調用者不應該知道方法是否需要很長時間,如果可能的話必須調用不同的方法。 – 2011-01-19 14:28:57