Chinaunix首页 | 论坛 | 博客
  • 博客访问: 610338
  • 博文数量: 96
  • 博客积分: 1464
  • 博客等级: 上尉
  • 技术积分: 1539
  • 用 户 组: 普通用户
  • 注册时间: 2011-11-12 23:24
文章分类

全部博文(96)

文章存档

2013年(29)

2012年(53)

2011年(14)

分类: Java

2012-06-12 21:53:24

最近看java书时,上面有提到 “可变对象访问器” 不理解,看了下代码,于是就自己敲了一遍,理解为:

可变对象访问器:在类A中定义类B做其属性时,直接用get方法返回此属性,那得到的是其引用,然后接收此返回值的对象(类B的一个对象)将可以改变类A对象的属性B的值。

解决的方法就是:在类A中返回此对象属性的克隆(clone),而不是直接返回此对象属性。

详细代码如下:

点击(此处)折叠或打开

  1. public class Employee {
  2.     public Employee(String n,double s,int year,int month,int day){
  3.         name = n;
  4.         salary = s;
  5.         GregorianCalendar calendar = new GregorianCalendar(year,month-1,day);
  6.         hireDay = calendar.getTime();
  7.     }
  8.     
  9.     public Date getHireDay(){
  10.         return hireDay;
  11.     }
  12.     
  13.     private String name;
  14.     private double salary;
  15.     private Date hireDay;

点击(此处)折叠或打开

  1. public static void main(String args[]){
  2.         Employee harry = new Employee("harry",1000.0,2012,6,12);
  3.         Date d = harry.getHireDay();

  4.         System.out.println("d: "+d);
  5.         System.out.println("harry.getHireDay(): "+harry.getHireDay());

  6.         double tenYearsInMilliSeconds = 10*365.25*23*60*60*1000;
  7.         d.setTime(d.getTime() - (long)tenYearsInMilliSeconds);

  8.         System.out.println("d: "+d);
  9.         System.out.println("harry.getHireDay(): "+harry.getHireDay());
  10.     }

运行后的结果:

点击(此处)折叠或打开

  1. d: Tue Jun 12 00:00:00 CST 2012
  2. harry.getHireDay(): Tue Jun 12 00:00:00 CST 2012
  3. d: Mon Nov 11 16:30:00 CST 2002
  4. harry.getHireDay(): Mon Nov 11 16:30:00 CST 2002


修改后的代码:

将返回可变对象的引用的clone

点击(此处)折叠或打开

  1. public Date getHireDay(){
  2.         return (Date)hireDay.clone();
  3.     }

修改后的结果:

点击(此处)折叠或打开

  1. d: Tue Jun 12 00:00:00 CST 2012
  2. harry.getHireDay(): Tue Jun 12 00:00:00 CST 2012
  3. d: Mon Nov 11 16:30:00 CST 2002
  4. harry.getHireDay(): Tue Jun 12 00:00:00 CST 2012

















阅读(2043) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~