• 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.

       

  • 相关阅读:
    leetcode 416. Partition Equal Subset Sum
    leetcode 696. Count Binary Substrings
    leetcode 74. Search a 2D Matrix
    leetcode 199. Binary Tree Right Side View
    leetcode 43. Multiply Strings
    leetcode 695. Max Area of Island
    leetcode 257. Binary Tree Paths
    leetcode 694. Number of Distinct Islands
    ros使用时的注意事项&技巧2
    ros使用时的注意事项&技巧
  • 原文地址:https://www.cnblogs.com/haokaibo/p/make-defensive-copies-when-needed.html
Copyright © 2020-2023  润新知