zoukankan      html  css  js  c++  java
  • java bean

    转自https://www.cnblogs.com/GoForMyDream/p/7746370.html

    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接口

  • 相关阅读:
    c++ 动态判断基类指针指向的子类类型(typeid)
    qt在GUI显示时,将调试信息输出到控制台的设置
    Qt库版查询
    Qt动态库静态库的创建、使用、多级库依赖、动态库改成静态库等详细说明
    ICMP timestamp 请求响应漏洞
    linux 防火墙 ufw使用
    MySQL--binlog和relay log的生成和删除
    SSD 相关基础知识
    python36--将数据保存为excel
    MySQL 5.7并发复制和mysqldump相互阻塞引起的复制延迟
  • 原文地址:https://www.cnblogs.com/jianfeijiang/p/11267945.html
Copyright © 2011-2022 走看看