2014年10月29日 星期三

Java 學習 - 為何要使用 getter 與 setter

如果把變數 name 設為 public,可以很方便的使用 instance.name 取得或設定該變數內容。為什麼要使用 instance.getName() 或 instance.setName() ?還要多寫兩個函數。

有句話說「能写private的,绝对不写protected,能写protected的,绝对不写public」

get()方法除了取值,還可以做一些其它事,
1.權限控制。取值之前先判斷權限。如果權限有問題則不給值。
2.回傳指定格式的內容。根據 get() 傳入的參數,回傳不同格式的內容。例如各種不同格式的日期
3.GS可以很方便的知道你的私有变量在哪里被用到了ctrl+alt+h (Open Call Hierarchy)

为什么J2EE大家都写getter/setter?
「getter/setter方法是一个好习惯,至少我是感觉到它们的好处了。。这种方式在使用继承重写的时候会方便很多,扩展和灵活性都会高很多很多」
「小的项目,不需要后续维护的项目你想怎么写都行。但是等你维护历史遗留的项目,或者做二次开发时,你就会体会出这些原则性的东西的重要性。」
「setter/getter是JavaBean的规范,不一定适合所有的场所。
用第三方框架的时候还是用setter/getter的好,像楼主的这种情况直接访问成员就好了,而不是直接setter/getter不好,然后所有的场所都否定setter/getter。
有的时候数据封装是必须的,但是有的时候封装了会觉得很麻烦,没必要。
一切绝对的说法都不对,因情况而定。」
「google官方文档上明确写的不要用get set 这样会比直接调用慢的多」



沒有留言:

張貼留言