《Java核心技术卷Ⅰ》读书笔记——4.3.6 封装的优点

注意:不要编写返回引用可变对象的访问器方法。在Employee类中就违反了这个设计原则,其中的getHireDay方法返回了一个Date类的对象:
class Employee{
    private Date hireDay;

    public Date getHireDay(){
        return hireDay; //Bad
    }
}
LocalDate类没有更改器方法,与之不同,Date类有个更改器方法setTime,可以设置毫秒数。
Date对象是可变的,这一点就破坏了封装性!(因为封装性只能用自己的setXXX更改器修改)如下面代码:
Employee harry = ...;
Date d = harry.getHireDay();
double tenYearsInMilliSeconds = 10 * 365.25 * 24 * 60 * 60 * 1000;
d.setTime(d.getTime() - (long)tenYearsInMilliSeconds);
d和harry.hireDay引用同一个对象,对d调用更改器方法就可以自动地改变这个雇员对象的私有状态!

如果需要反回一个可变对象的引用,应该首先对它进行克隆。对象clone是指存放在另一个位置上的对象副本。下面是修改后的代码:

class Employee{
    private Date hireDay;

    public Date getHireDay(){
        return (Date)hireDay.clone(); //OK
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值