getter 和 setter 方法有什麼意義?

時間 2021-05-05 17:03:36

1樓:

回答都是不會說人話的,乙個個說著那麼抽象的名詞,像我這種菜雞聽得懂嗎?怒答

比如你定義了乙個正方形的 class,在其內部宣告了周長每條邊長度的變數,那麼你使用

square

.sideLength=3

;//將長方形的邊長改為3,但周長的值沒有相應地改變那麼這個操作的後果就是在邊長的值被改變後,周長的值沒有發生改變。如果正方形的 class 內部宣告了 setter 方法,那就可以動態地改變周長的值了。

這就是不要選擇將變數直接暴露的原因

2樓:Gelbert Gao

get,set方法裡面可以寫簡單的業務邏輯啊。

這些對實體類外部是不可見的。

你想存變數,是set方法說了算,不是你想存什麼就能存什麼,不是存什麼存進去就是什麼。

你想取變數,get方法說了算,不是你存什麼了就能取什麼。

今天看到《重構》Organizing Data 一章的Self Encapsulate Field 一節,見圖:

講得很好,可以解釋為什麼要用get ,set的原因。

3樓:圓胖腫

其實這個最大的意義在於,你可以在這兩個方法上加鎖所謂不安全就是多執行緒併發訪問修改的時候,可能造成不可預知的後果考慮一下同時修改乙個public屬性的情況,i+1可不是原子操作不過這個問題在vert.x下不成為乙個問題,因為verticle自身可以保證單執行緒環境

所以在vert.x下,我們不會使用set/get方法,可以直接操作public屬性

4樓:極光掠過天邊

我感覺就是除了所謂的隱藏細節這種理論上的,和訪問控制這種實用性的原因外,還有就是為了格式統一:物件的「.」後面,跟的全是方法!

不建議直接拖個變數。(陣列的length是什麼鬼……)

5樓:

補充一點:

大家都用了之後, 你使用別人的類, 去找哪些類可以賦值時候, 就class名.set

然後IDE就自動提醒你, 哪些可以使用啦````get也是同樣的道理

6樓:z張英俊

建立Hook函式,比如說很久以前的JSON劫持就是對Object.prototype設定了setter來獲取使用者的敏感資訊

7樓:Levski

同意@仲晨 的回答,但是這裡還想從另外乙個更巨集觀的角度,以我的理解做一點補充。

對於OOP,巨集觀上來說,設計者都在試圖做到的一件事情就是如何當好程式中的上帝。通過設計良好的介面(這裡的良好指的是不多也不少)來對外暴露乙個物件的能力,使得使用者只需要充分了解介面,就可以了解這個物件所能提供的能力。

而使用「方法」來表達物件的能力,同使用「變數」相比,從巨集觀上來說,沒有什麼區別,只是形式上的不同。但使用「方法」來表達介面,更容易體現OOP的乙個核心理念「隱藏細節」

8樓:張良

對於執行緒安全有很大意義。如果是安全的getter、setter是可以在多個執行緒裡用的,可以配合其它執行緒安全的方法一起使用。

如何理解原型鏈中的setter和屬性遮蔽之間的關係?

卓怡 這個問題我弄明白了,自己回答一下吧 varanotherObject getb a 2 varmyObject Object create anotherObject 對myObject操作 myObject.a 7 呼叫了setter,但是myObject.a 的仍然是7但是如果對c操作的話...

OOP 中 靜態方法 和 類方法 的區別

靈劍 以Python為例,instance method呼叫時,第乙個引數傳入的是物件的引用 class method呼叫時,第乙個引數傳入的是實際呼叫的類 static method呼叫時,沒有第乙個引數的繫結。static method實際上是沒有引數繫結的方法,它其實是面向過程當中的普通函式,...

方法和思維那個重要?

念舒 如果沒有目標,當前狀態到目標的路徑很多就會發散失去焦點無法收斂,像毫無章法的無頭蒼蠅。有目標,就可以在目標和當前狀態之間繪製無數條曲線路徑。剩下就是慢慢挑選的問題。有術無道,缺乏目標的探索類似蒙特卡洛方法,可以通過大量時間的無規則探測反映出整個空間的真實分布,看清空間的模樣。就像哥倫布航海發現...