2012-07-25 91 views

回答

5

因爲,

驗證是一個原因。將字段名稱保留在公共API之外還允許您在不中斷API的情況下稍後對其進行更改。並且它允許您稍後以其他方式改變課程,例如將領域移動到其他類(這樣公共二傳手可以在另一個類中調用一個setter)。調用setter也可以讓你做其他事情,例如通知感興趣的其他組件的價值變化。如果直接訪問該字段,這些都不可能。

+0

還有像封裝,類型轉換這樣的OOP設計模式都很重要。如果您閱讀了基本的OOP設計概念,那麼很好理解面向對象編程結構的工作原理。 – user370305 2012-07-25 06:45:55

2

他們更傾向於將來驗證代碼。將來如果您想消除變量或使用另一個變量來推導出這個變量值 - 則變化更簡單。你只需要改變getter/setter,其餘的代碼不受影響。直接訪問變量不是這種情況。

0

其簡單..如果你讓這些變量公開,那麼你給予他們任何價值的權利。 但是,如果你是通過getter和setter方法......你可以把在它的檢查和控制輸入或轉換,無需讓最終用戶知道

如:

getName(){ 
    return firstName+lastName; 
} 

getData(){ 
    // code to convert byte to Mb or whatever you like to represent 
} 
1

由於@ user370305已經提到了一個原因是驗證。 其他原因是類型轉換。 Setter可能接受字符串並將其解析爲整數。另一個原因是數據封裝。並不一定要在同一個班級中存儲簡單的文件。類Person的方法setName(String)可以將該名稱存儲在更復雜的數據結構中。使用簡單字段不允許您更改類Person的內部實現,而不影響使用它的代碼。編輯: 又一個技術原因。 用getter和setter來發現和調試代碼要容易得多。如果某些字段意外更改,您可以將中斷點切換到適當的setter中,並快速找到問題。如果這個字段是公開的,並且你有1000個這個字段的引用,那麼理論上你必須在所有這些地方放置1000個斷點。

0

使用accessors限制對字段變量的直接訪問優於使用public fields,但是,使getters and setter for each and every field is overkill被認爲是不好的做法。它也取決於情況,有時候你只是想要一個愚蠢的數據對象。應該添加Accessors以用於真正需要的字段。看到這個鏈接瞭解更多關於它Getter Setter: To Use or Not to Use

1

1.Encapsulation在不同的上下文中不同的使用,在其design patterns行爲,不斷變化的需求在抽象類或接口被封裝。

2.private instance variablepublic getter setter爲b

其主要做驗證從用戶輸入...的值設置爲一個實例變量是直接的危險。

如:

int dogAge; 

     System.out.println("My dogs age is :"+dogAge); 

現在,如果有人給出了否定的時代......那什麼...... ???

所以我們必須做這樣...

int dogAge; 

     public void setAge(int age){ 

     if (age>0){ 
     dogAge = age; 
     } 
     else{ 

       System.out.println("Not a valid age"); 
      } 

    } 

    public int getAge(){ 


     return dogAge; 

     } 

    System.out.println("My dog age is :"+ getAge()); 
-1

我找不到具有一個getter和什麼也不做,而是直接一個setter一個私有變量背後的邏輯原因處理該值優於具有公共變量。

考慮到你放入getter和setter的任何附加代碼增加了複雜性,也需要測試。對於完全由您控制的小型系統,使用吸氣和吸氣裝置可能沒有什麼益處。使用你的專業判斷。你可能不需要將來的證明,並增加了複雜性。或者直接訪問的效率和簡單性對您來說可能更重要。

就我個人而言,我認爲getters和setters是過度使用。對於完全由您控制的小型系統,直接訪問可能是一條路。

相關問題