在公有類中使用訪問方法而非公有域

第十四條:在公有類中使用訪問方法而非共有域


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的引用。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 這種類數據是可以被直接訪問的,這些類沒有提供封裝的功能,如果不改變API,就無法改變它的數據表示法,也無法強加任何...
    KubiL閱讀 467評論 0 0
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,769評論 18 399
  • 常量與變量使用let來聲明常量,使用var來聲明變量。聲明的同時賦值的話,編譯器會自動推斷類型。值永遠不會被隱式轉...
    莫_名閱讀 467評論 0 1
  • 從三月份找實習到現在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂視家的研發崗...
    時芥藍閱讀 42,373評論 11 349
  • 我每天喪的像一條狗,但是有人告訴我,喪也要喪在心里,不喪在臉上,不喪在話里,不喪在人群間。 1.上午忙炸天,沒時間...
    宋大寶不飽閱讀 792評論 0 0