避免创建不必要的对象

来源:互联网 发布:美微网络电视看香蕉 编辑:程序博客网 时间:2024/05/27 02:26

public class Person {    private final Date birthDate;    public Person(Date birthDate) {        // Defensive copy - see Item 39        this.birthDate = new Date(birthDate.getTime());    }    // Other fields, methods omitted    // DON'T DO THIS!    public boolean isBabyBoomer() {        // Unnecessary allocation of expensive object        Calendar gmtCal =            Calendar.getInstance(TimeZone.getTimeZone("GMT"));        gmtCal.set(1946, Calendar.JANUARY, 1, 0, 0, 0);        Date boomStart = gmtCal.getTime();        gmtCal.set(1965, Calendar.JANUARY, 1, 0, 0, 0);        Date boomEnd = gmtCal.getTime();        return birthDate.compareTo(boomStart) >= 0 &&               birthDate.compareTo(boomEnd)   <  0;    }}


优化版本:

class Person {    private final Date birthDate;    public Person(Date birthDate) {             this.birthDate = new Date(birthDate.getTime());    }       private static final Date BOOM_START;    private static final Date BOOM_END;    static {        Calendar gmtCal =            Calendar.getInstance(TimeZone.getTimeZone("GMT"));        gmtCal.set(1946, Calendar.JANUARY, 1, 0, 0, 0);        BOOM_START = gmtCal.getTime();        gmtCal.set(1965, Calendar.JANUARY, 1, 0, 0, 0);        BOOM_END = gmtCal.getTime();    }    public boolean isBabyBoomer() {        return birthDate.compareTo(BOOM_START) >= 0 &&               birthDate.compareTo(BOOM_END)   <  0;    }}

原创粉丝点击