public class Employee {
private Date hirDate;
public Date getHirDate() {
return hirDate;
}
}
在日常的开发过程中,注意要尽量编写返回引用可变对象的访问器的方法。
在上边的Employee类中,就违反这种原则,其中的getHirDate()方法返回了一个Date类的对象;
在Date类中有一个修改器方法setTime,利用这个方法可以设置毫秒数,也就是说Date对象是可变的,这一点破坏了封装性,例如
public static void main(String[] args) {
Employee harry = new Employee();
Date d = harry.getHirDate();
d.setTime(d.getTime()-100);
}
在上边的代码中,d和harry.getHirDate()引用了同一个对象,那么对d调用setTime方法就会更改掉harry对象的私有状态,图示如下:
如果我们需要返回一个可变类型的引用,应该首先对它进行克隆,在另一个位置存放对象的副本