zoukankan      html  css  js  c++  java
  • Effective Java 39 Make defensive copies when needed

    Principle

    1. It is essential to make a defensive copy of each mutable parameter to the constructor.
    2. Defensive copies are made before checking the validity of the parameters (Item 38), and the validity check is performed on the copies rather than on the originals.  

      // Repaired constructor - makes defensive copies of parameters

      public Period(Date start, Date end) {

      this.start = new Date(start.getTime());

      this.end = new Date(end.getTime());  

      //Make the defensive copies of the parameters before using them.

      if (this.start.compareTo(this.end) > 0)

      throw new IllegalArgumentException(start +" after "+ end);

      }

         

      TOCTOU = time of check/ time of use.

    3. Do not use the clone method to make a defensive copy of a parameter whose type is subclassable by untrusted parties.
    4. Return defensive copies of mutable internal fields.  

      // Repaired accessors - make defensive copies of internal fields

      public Date start() {

      return new Date(start.getTime());

      }

      public Date end() {

      return new Date(end.getTime());

      }  

    Summary

    If a class has mutable components that it gets from or returns to its clients, the class must defensively copy these components. If the cost of the copy would be prohibitive and the class trusts its clients not to modify the components inappropriately, then the defensive copy may be replaced by documentation outlining the client's responsibility not to modify the affected components.

       

  • 相关阅读:
    CSS清除浮动的方法
    JS获取元素属性、样式getComputedStyle()和currentStyle方法兼容性问题
    数据类型真假的问题
    数据类型——方法总结(可能有不对的)
    attr()与setAttribute()的区别
    wampserver 2.5多站点配置
    php常用函数(持续中)
    php中环境变量
    编码转换
    php中rsa加密及解密和签名及验签
  • 原文地址:https://www.cnblogs.com/haokaibo/p/make-defensive-copies-when-needed.html
Copyright © 2011-2022 走看看