簡體   English   中英

Java中復雜getter的命名約定

[英]Naming conventions for complex getters in Java

我正在閱讀這篇關於.NET中屬性和方法的使用的MSDN 文章 它指出了為什么以及何時使用屬性或方法。

屬性意味着像字段一樣使用,這意味着屬性不應該在計算上復雜或產生副作用。

否則應該使用方法。

我問自己如何在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM