1. 程式人生 > >getter 和 setter 方法有什麼意義?

getter 和 setter 方法有什麼意義?

來自《 API design for C++ 》

1. 有效性驗證(可以在setter裡檢查設定的值是否在許可區間裡)
2. 惰性求值(比如一個成員計算過於耗時,而這個類的使用者(這裡的使用者指其他程式設計師)不一定需要時,可以在getter方法呼叫的時候再計算)
3. 快取額外的操作(比如使用者呼叫setter方法時,可以把這個值更新到配置檔案裡)
4. 通知(其它模組可能需要在某個值發生變化的時候做一些操作,那麼就可以在setter裡實現)
5. 除錯(可以方便的列印設定日誌,從而追蹤錯誤)
6. 同步(如果多執行緒訪問需要加鎖的話,setter里加鎖不是很容易麼)
7. 更精細的許可權訪問(比如private變數只有
getter沒有setter,那客戶對該變數就是隻讀了,而類的內部程式碼可以讀寫)
8. 維護不變式關係(比如一個類內部要維持連個變數a和b有a = b * 2的關係,那麼在a和b的setter裡計算就能維持這樣的關係)

我再說個,還可以不對外暴露內部的資料組織方式,即使類資料的組織結構發生變化也不需要修改外部使用者的程式碼。

相關推薦

getter setter 方法什麼意義

來自《 API design for C++ 》1. 有效性驗證(可以在setter裡檢查設定的值是否在許可區間裡)2. 惰性求值(比如一個成員計算過於耗時,而這個類的使用者(這裡的使用者指其他程式設計師)不一定需要時,可以在getter方法呼叫的時候再計算)3. 快取額外

JavaScript中閉包實現的私有屬性的getter()setter()方法

參數 strong prop nbsp body 利用 edi 獲取 展示 註意: 以下的輸出都在瀏覽器的控制臺中 <!DOCTYPE html> <html> <head> <meta charset="utf-8"&g

基於註解處理器開發自動生成gettersetter方法的外掛

昨天無意中,逛到了lombok的網站,並看到了首頁的5分鐘視訊,視訊中的作者只是在實體類中寫了幾個欄位,就可以自動編譯為含setter、getter、toString()等方法的class檔案。看著挺新奇的,於是自己研究了一下原理,整理下發出來。 1.何處下手 視訊中作者的流程為: (1)編寫Java檔

使用property升級取代gettersetter方法

使用property升級getter和setter方法 class Money(object): def __init__(self): self.__money = 0 def getMoney(self):

安裝lombok後,eclipse不能自動生成gettersetter方法

原因: lombok版本問題,我安裝了lombok後,eclipse不能自動生成getter和setter方法,我替換了一下版本,換成了lombok v1.16.6,就可以了,具體安裝lombok的教程,參考我另一篇文章 http://blog.csdn.net/kingS

我們需要gettersetter方法麼?

在日常工作中,Java是我最頻繁使用的語言。關於getter和setter我也聽說過不少。我的感覺是在許多場合,我們不需要getter和setter方法。 回想一下我們寫JavaBean,建立一個類,然後編寫一些private欄位,最後使用一個smart IDE幫助我們生成對

關於gettersetter方法都生成的情況下卻出現了No such method這樣的問題

今天在機房用學校的電腦,將自己在筆記本上未完成的作業,大致又寫了一遍但是出現了一個奇怪的錯誤, Method "setEmployeeDeptId" failed for object [email protected] [java.lang.NoSuchMeth

scala屬性的gettersetter方法

類的基本內容要點: 1、scala在定義欄位時使用var ,預設生成對應setter和getter方法 2、呼叫了scala的setter方法  對應的名稱money_= 3、呼叫了scala的gettter方法  對應的名稱就為欄位名稱money 4、當使用val定義欄位

JavaScript物件中屬性的gettersetter方法

JavaScript物件的屬性是由名字、值和一組特性(可寫、可列舉、可配置等)構成的。在ECMAScript 5中,屬性值可以用一個或兩個方法代替,這兩個方法就是getter和setter。 var myObj = { a: 2, get

java中自動生成gettersetter方法

getter和setter方法呼叫 首先我們先定義一個類 package csdn; public class Test { public static void main(String[] args) { // TODO Auto-generated

About @property包裝器 gettersetter方法

如果想訪問屬性可以通過屬性的getter(訪問器)和setter(修改器)方法進行對應的操作   class Per

【OC學習-8】存取器方法gettersetter?事實上就是賦值返回值的兩種函數

trac -m main 都是 protect pro 聲明 return 安全 我們在聲明類的時候,有實例變量+方法(函數),這些實例變量假設默認的話都是protected類型,一般無法直接訪問。更別提賦值和調用了,所以就產生了兩種函數,ge

Objective-C中,類方法gettersetter可以用點運算符嗎?

clang col 靜態變量 變量 uri family lan getc sta Objective-C中,對象實例property的getter和setter可以使用點運算符來操作,那麽類方法的getter和setter可以使用點運算嗎? 答案是肯定的。 看如下代碼

Vue的計算屬性,方法與偵聽器以及計算屬性的 getter setter

計算屬性:優先推薦,原因:既簡潔又效能高 <body> <div id="app"> {{fullName}} {{age}} </div> <script> var vm = new Vue({

java裏gettersetter的作用(轉載)

details 訪問 str 內部 比較 進行 無需 銀行 自己的 【java】類中使用getter和setter的優勢 http://www.importnew.com/9716.html java有三大特性:封裝,繼承還有多態。

自動生成gettersetter方法的插件lombok

align es2017 此外 div bsp gpo idea alsa ane 1.在InteiliJ IDEA上安裝lombok插件,並重啟 . 2.在pom.xml文件中添加依賴 <dependency> <groupId>org.pr

Python_gettersetter方法

block 指南 進行 cnblogs recent must 可能 get back 當給屬性賦值的時候,使用實例.屬性=屬性值的方式顯然把屬性暴露出來了,並且也無法對屬性值進行限制檢查,java中提供了setter和getter方法,那麽python是如何做的呢?更多

doGet()方法doPost()方法什麽區別?

post htm 受限 數據 添加 header cti 服務器 div 1. 一般上,get是從服務器上獲取數據,post是向服務器傳送數據。 2. get是把參數數據隊列加到提交表單的ACTION屬性所指的URL中,值和表單內各個字段一一對應,在URL中可以看到。p

線程的sleep()方法yield()方法什麽區別?

rup 方法 cpu led 相關 什麽 inter 阻塞 lock 1.sleep()方法給其他線程運行機會時不考慮線程的優先級,因此會給低優先級的線程以運行的機會 2.yield()方法只會給相同優先級或更高優先級的線程以運行的機會 3.線程執行sleep()方

Thread類的sleep()方法對象的wait()方法都可以讓線程暫停執行,它們什麽區別? 線程的sleep()方法yield()方法什麽區別?

阻塞 可移植性 喚醒 ora 暫停 obj 狀態 ati 對象 Thread類的sleep()方法和對象的wait()方法都可以讓線程暫停執行,它們有什麽區別?   sleep()方法(休眠)是線程類(Thread)的靜態方法,調用此方法會讓當前線程暫停執行指定的時間,將執