zoukankan      html  css  js  c++  java
  • <java复习>返回可变对象引用的get方法要点

        在看java核心技术第一卷的第四章时,学习到了一个关于访问器方法可能会破坏类的封装性的情况,在以前一直没有发现这个问题。

        这个情况表现如下:对于一个返回可变对象的访问器方法,外部代码可以通过调用这个可变对象的方法来修改其中的值,从而改变对象的状态,破坏了类的封装性

        例如:有一个类Emploee,其中有一个Date的字段,当使用get方法获取到Date对象时,在类外可以使用Date的set方法修改这个对象的值,从而违背了面向对象封装性的要求。

     1 import java.util.Date;
     2 
     3 public class Study2 {
     4     public static void main(String[] args) {
     5         Employee employee = new Employee();
     6         Date a = new Date();
     7         employee.setDay(a);
     8         //Sat Aug 22 22:59:45 CST 2020
     9         System.out.println(employee.getDay().toString());
    10         Date d = employee.getDay();
    11         double t = 24*10*365.25*60*60*1000;
    12         d.setTime(d.getTime() - (long)t);
    13         //a = Mon Aug 23 10:59:45 CST 2010
    14         System.out.println("修改后 a = " + a.toString());
    15         //d = Mon Aug 23 10:59:45 CST 2010
    16         System.out.println("d = " + d.toString());
    17     }
    18 }
    19 class  Employee{
    20     private Date day;
    21 
    22     public Date getDay(){
    23         return this.day;
    24     }
    25     public void setDay(Date day){
    26         this.day = day;
    27     }
    28 }

           书中给出的解决方法是采用克隆的方法,对于返回可变对象引用的方法,返回其克隆的对象,这样子就避免了在类外可以修改到类的可变对象字段。

    不过我认为要具体情况具体分析,对于一些确实需要在类外修改可变对象值得情况要特殊考虑。

  • 相关阅读:
    第二阶段小组站立会议-4-26
    小组站立会议-2014-04-25张永组
    第二阶段小组站立会议-2014-04-24
    小组站立会议-张永组-4-23
    第二阶段会议-阶段目标-张永组
    小组项目第二阶段会议--2014420
    团队下阶段任务分配会议记录-张永组
    Floaty Fish(内测版)发布前一天-------张永组
    电梯调度设计之初感想——蔡迎盈&&曹玉松
    单元测试——我的认识
  • 原文地址:https://www.cnblogs.com/mlcn-2000/p/13547665.html
Copyright © 2011-2022 走看看