我不能找到具有與吸氣私有變量和什麼也不做二傳手,而是直接辦理值是最好的背後的邏輯原因有一個公共變量。
我錯過了什麼嗎?
我不能找到具有與吸氣私有變量和什麼也不做二傳手,而是直接辦理值是最好的背後的邏輯原因有一個公共變量。
我錯過了什麼嗎?
因爲,
驗證是一個原因。將字段名稱保留在公共API之外還允許您在不中斷API的情況下稍後對其進行更改。並且它允許您稍後以其他方式改變課程,例如將領域移動到其他類(這樣公共二傳手可以在另一個類中調用一個setter)。調用setter也可以讓你做其他事情,例如通知感興趣的其他組件的價值變化。如果直接訪問該字段,這些都不可能。
還有像封裝,類型轉換這樣的OOP設計模式都很重要。如果您閱讀了基本的OOP設計概念,那麼很好理解面向對象編程結構的工作原理。 – user370305 2012-07-25 06:45:55
他們更傾向於將來驗證代碼。將來如果您想消除變量或使用另一個變量來推導出這個變量值 - 則變化更簡單。你只需要改變getter/setter,其餘的代碼不受影響。直接訪問變量不是這種情況。
其簡單..如果你讓這些變量公開,那麼你給予他們任何價值的權利。 但是,如果你是通過getter和setter方法......你可以把在它的檢查和控制輸入或轉換,無需讓最終用戶知道
如:
getName(){
return firstName+lastName;
}
或
getData(){
// code to convert byte to Mb or whatever you like to represent
}
由於@ user370305已經提到了一個原因是驗證。 其他原因是類型轉換。 Setter可能接受字符串並將其解析爲整數。另一個原因是數據封裝。並不一定要在同一個班級中存儲簡單的文件。類Person
的方法setName(String)
可以將該名稱存儲在更復雜的數據結構中。使用簡單字段不允許您更改類Person
的內部實現,而不影響使用它的代碼。編輯: 又一個技術原因。 用getter和setter來發現和調試代碼要容易得多。如果某些字段意外更改,您可以將中斷點切換到適當的setter中,並快速找到問題。如果這個字段是公開的,並且你有1000個這個字段的引用,那麼理論上你必須在所有這些地方放置1000個斷點。
使用accessors
限制對字段變量的直接訪問優於使用public fields
,但是,使getters and setter for each and every field is overkill
被認爲是不好的做法。它也取決於情況,有時候你只是想要一個愚蠢的數據對象。應該添加Accessors
以用於真正需要的字段。看到這個鏈接瞭解更多關於它Getter Setter: To Use or Not to Use。
1.Encapsulation
在不同的上下文中不同的使用,在其design patterns
像行爲,不斷變化的需求在抽象類或接口被封裝。
2.有private instance variable
和public 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());
我找不到具有一個getter和什麼也不做,而是直接一個setter一個私有變量背後的邏輯原因處理該值優於具有公共變量。
考慮到你放入getter和setter的任何附加代碼增加了複雜性,也需要測試。對於完全由您控制的小型系統,使用吸氣和吸氣裝置可能沒有什麼益處。使用你的專業判斷。你可能不需要將來的證明,並增加了複雜性。或者直接訪問的效率和簡單性對您來說可能更重要。
就我個人而言,我認爲getters和setters是過度使用。對於完全由您控制的小型系統,直接訪問可能是一條路。
[這裏](http://stackoverflow.com/questions/565095/are-getters-and-setters-evil)是在此許多許多職位上SO之一。 – Keppil 2012-07-25 06:38:04