美文网首页
第 50 条:必要时进行保护性拷贝

第 50 条:必要时进行保护性拷贝

作者: 综合楼 | 来源:发表于2021-05-26 20:56 被阅读0次
    必要时进行保护性拷贝.jpeg
    // Broken "immutable" time period class
    public final class Period {
        private final Date start;
        private final Date end;
        /**
        * @param start the beginning of the period
        * @param end the end of the period; must not precede start
        * @throws IllegalArgumentException if start is after end
        * @throws NullPointerException if start or end is null
        */
        public Period(Date start, Date end) {
            if (start.compareTo(end) > 0)
                throw new IllegalArgumentException(start + " after " + end);
            this.start = start;
            this.end = end;
        }
        public Date start() {
            return start;
        }
        public Date end() {
            return end;
        }
        ... // Remainder omitted
    }
    
    // Attack the internals of a Period instance
    Date start = new Date();
    Date end = new Date();
    Period p = new Period(start, end);
    end.setYear(78); // Modifies internals of p!
    
    // 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());
        if (this.start.compareTo(this.end) > 0)
            throw new IllegalArgumentException(this.start + " after " + this.end);
    }
    
    // Second attack on the internals of a Period instance
    Date start = new Date();
    Date end = new Date();
    Period p = new Period(start, end);
    p.end().setYear(78); // Modifies internals of p!
    
    // Repaired accessors - make defensive copies of internal fields
    public Date start() {
        return new Date(start.getTime());
    }
    public Date end() {
        return new Date(end.getTime());
    }
    

    相关文章

      网友评论

          本文标题:第 50 条:必要时进行保护性拷贝

          本文链接:https://www.haomeiwen.com/subject/dqhodltx.html