[英]Naming conventions for complex getters in Java
我問自己如何在Java中表達這種差異。
只是不要在方法上使用get
前綴,因為它通常意味着該方法將是便宜的(因為getter通常只訪問字段,委托給其他getter,或者基於其他getter執行相當簡單的計算)。 例如,如果一個類有這個接口:
class Blob {
long getLength() { ... }
ByteBuffer getBytes() { ... }
Sha1Checksum getChecksum() { ... }
}
......從Blob
獲取長度,內容和校驗和似乎同樣代價高昂。 如果我們這樣做,而是:
interface Blob {
long getLength() { ... }
ByteBuffer getBytes() { ... }
Sha1Checksum calculateChecksum() { ... }
}
......很明顯(呃)我們可以期望calculateChecksum()
比其他操作更昂貴,因為它的名字說它不僅僅是獲取一些東西。
在某種程度上,復雜性是一個實現問題,不應該在界面中看到(也許我決定在構建Blob
時急切地計算校驗和?),但有時候區分是有意義的。
我只是不同意那篇文章所說的內容。 屬性是語法糖,否則你只是使用字段。
getters / properties的要點是封裝 - 用戶不知道它只是一個字段,每次計算的東西還是隨機值。
這意味着對我來說,Java中不是“數據結構”的每個類都有其字段的getter和setter(需要可訪問)。
這取決於。 如果所有操作都是完全內部的,那么getSomething()
即使對於復雜的實現也是可以的 - getter / setter / properties的全部意義在於封裝實現細節並隱藏它們,即使將來它們變得復雜。
例外情況是,如果操作過於復雜,可能會花費大量時間或資源(例如從互聯網下載一些數據)。 在這種情況下,我可能會使用不同的方法名稱 - 它有點破壞封裝,但它是有用和實用的。
但是,如果getter有任何可觀察到的副作用 ,我可能不會使用簡單的getSomething()
約定來避免混淆。 也許我會使用updateAndReturn()
或getAndComplexify()
或getFromWeb()
或類似的東西。
C#Property基本上是Java getter和setter。 如果我需要為一個實例使用geters和setter,我總是選擇屬性。 在java中,我沒有這個選項。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.