javaBean的理解


轉自知乎
作者:楊博
鏈接:https://www.zhihu.com/question/19773379/answer/31625054
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

Java語言欠缺屬性、事件、多重繼承功能。所以,如果要在Java程序中實現一些面向對象編程的常見需求,只能手寫大量膠水代碼。Java Bean正是編寫這套膠水代碼的慣用模式或約定。這些約定包括getXxx、setXxx、isXxx、addXxxListener、XxxEvent等。遵守上述約定的類可以用於若干工具或庫。

舉個例子,假如有人要用Java實現一個單向鏈表類,可能會這樣寫:
// 編譯成 java-int-list_1.0.jar
public final class JavaIntList {
  static class Node {
    public Node next;
    public int value;
  }
  public Node head;
  public int size;
}

 

上述實現為了能夠快速獲取鏈表的大小,把鏈表大小緩存在size變量中。用法如下:
JavaIntList myList = new JavaIntList();
System.out.println(myList.size);

 

JavaIntList的作者很滿意,於是開源了java-int-list庫的1.0版。文件名是java-int-list_1.0.jar。發布后,吸引了許多用戶來使用java-int-list_1.0.jar。
有一天,作者決定要節省內存,不要緩存size變量了,把代碼改成這樣:
// 編譯成 java-int-list_2.0.jar
public final class JavaIntList {
  static final class Node {
    public Node next;
    public int value;
  }
  public Node head;
  public int getSize() {
    Node n = head;
    int i = 0;
    while (n != null) {
      n = n.next;
      i++;
    }
    return i;
  }
}

 

然后發布了2.0版:java-int-list_2.0.jar。發布后,原有java-int-list_1.0.jar的用戶紛紛升級版本到2.0。這些用戶一升級,就發現自己的程序全部壞掉了,說是找不到什么size變量。於是這些用戶就把作者暴打一頓,再也不敢用java-int-list庫了。

這個故事告訴我們,如果不想被暴打致死,你就必須保持向后兼容性。太陽公司在設計Java語言時,也懂得這個道理。所以Java標准庫中,絕對不會出現public int size這樣的代碼,而一定會一開始就寫成:
private int size;
public int getSize() { return size; }

 

讓用戶一開始就使用getSize,以便有朝一日修改getSize實現時,不破壞向后兼容性。這種public int getSize() { return size; }的慣用手法,就是Java Bean。

===============================================以上轉自知乎============================================================

那么我個人理解的javaBean,這只是一種規范而不是某種類或者說某種技術,為了實現這個規范,要滿足下面四個條件。

1、所有屬性為private
2、提供默認構造方法
3、提供getter和setter
4、實現serializable接口


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM