2014-05-16 19 views
5

我只是想知道,如果它是可取的內部類實例訪問類變量使用getter方法,並且如果有任何實際的性能差異與直接訪問。特別是在jvm中預計會生成許多對象的情況下。是getter方法調用訪問變量比直接訪問變量更好的一類

+0

如果您需要限制變量訪問(例如,使變量只讀)或對變量更改執行一些操作(通知) - 最好使用getter/setter。 –

+2

這是http://stackoverflow.com/q/8466790/217324的重複。雖然我不同意所選的答案(我發表了相反的意見)。 –

+0

@NathanHughes您的回答正好是我希望有一種方式來接受評論作爲答案。 – Bwire

回答

12

在Java中,通過getter/setters從類外部訪問所有字段是一個慣例。從課內,你通常直接訪問字段。但是,您也可以通過getter/setter訪問它們。

重要的是要知道,這只是一個約定。許多其他編程語言沒有這樣嚴格的規則或其他概念。所以你不會被迫這麼做。但這是一個很好的做法。

而且:不介意表現!使用getter/setter不會影響應用程序的性能。 JVM/Java被設計爲完全像這樣工作。每個JVM都會優化你的代碼並以一種非常有效的方式處理getter/setter。嘗試寫出清晰且可讀的代碼。

2

我會在三個部分回答你的問題:

1。直接訪問(公共成員)是最差的溶液:

公共成員可以從類,這對於實際的考慮是指「可能的任何地方」外部訪問。如果公共領域出現問題,罪魁禍首可能在任何地方,所以爲了追蹤錯誤,您可能需要查看相當多的代碼。

2。封裝(私有成員):

專用成員,相比之下,只能從同一個類內部訪問,因此如果出現錯誤與中,通常只有一個源文件來看待。如果你在你的項目中的萬行代碼,但你的類都可以保持很小,這可以通過1000

3倍,降低您的bug跟蹤的努力。 getter和setter高度過度:

創建私有字段,然後使用IDE自動生成getter和setter所有這些領域幾乎是使用公共字段壞。

過度使用的一個原因是在IDE中,現在只需點擊幾下即可創建這些訪問器。完全無意義的getter/setter代碼有時比一個類中的真實邏輯長,即使你不想要,你也會多次讀這些函數。

結論:

使用的存取器(getter和setter),然而,以限制到字段變量直接訪問優於使用公共字段,,使吸氣劑和setter用於每一個領域是矯枉過正。它也取決於情況,有時候你只是想要一個愚蠢的數據對象。訪問者應該被添加到他們真正需要的領域。一個類應該暴露使用其狀態的較大行爲,而不是由其他類操縱的狀態庫。

-1

我相信getter方法調用比直接調用更好,因爲這將有助於找到來自內部類和外部類的所有引用。