第十四條:在公有類中使用訪問方法而非共有域
1.簡單介紹
這一條的意思是讓你這樣做:
public class MyObject{
private int filed01;
public int getFiled01() {
return filed01;
}
public void setFiled01(int filed01) {
this.fild01 = filed01;
}
}
而不要這樣做:
public class MyObject{
public int filed01;
}
2. 原因
如果直接將類中的域暴露為共有域,那么你將失去這個域的控制權。
舉個例子,對于上面例子中不好的用法,如果你以后想要在類中記錄field01被賦值了多少次和被獲取了多少次,你將無法做到,因為你根本不知道它什么時候在外部被獲取,什么時候再外部被賦值。
3. 加入一些個人拓展理解(總是覺得不太對,希望得到指正)
一個類要確保對所以域的絕對控制權,我們不應該讓任何外部類獲取到該類的可變對象的引用。
比如說下面這個類,里面有一個域是一個可變對象,我們應該這樣做:
public class MyObject{
private List<String> list = new ArrayList<>;
public List<String> getList() {
return new ArrayList(list);
}
public void setList(List<String> list) {
this.list = new ArrayList(list);
}
}
這樣做,外部將永遠也獲取不到list的引用。