码迷,mamicode.com
首页 > 其他好文 > 详细

注意不要编写返回引用可变对象的访问器方法

时间:2015-06-24 16:06:01      阅读:106      评论:0      收藏:0      [点我收藏+]

标签:

在看《Java核心技术(原书第9版中文版)》的时候,看到113页的一个警告,“注意不要编写返回引用可变对象访问方法”。以前没看到过,原来Date对象可变对象。就可变对象这个概念,查了一下网,我认为可变对象,就是在类中可以不通过域更改器方法就能改变值的对象

 1 package com.csst.sort;
 2 
 3 import java.util.Date;
 4 import java.util.GregorianCalendar;
 5 
 6 public class Employee {
 7     private String name;
 8     private double salary;
 9     private Date hireDay;
10 
11     public Employee(String n, double s, int year, int month, int day) {
12         name = n;
13         salary = s;
14         GregorianCalendar Calendar = new GregorianCalendar(year, month - 1, day);
15         hireDay = (Date) Calendar.getTime();
16     }
17 
18     public static void main(String[] args) {
19 
20         Employee employee = new Employee("lele", 600, 1994, 10, 24);
21 
22         Date date = employee.getHireDay();
23         System.out.println(date);
24 
25         date.setTime(2000500000);
26       
27         System.out.println(date);
28         System.out.println(employee.getHireDay());
29     }
30 
31     public void raiseSalary(double byPercent) {
32         double raise = this.salary * byPercent / 100;
33         salary = this.salary + raise;
34     }
35 
36     public String getName() {
37         return name;
38     }
39 
40     public void setName(String name) {
41         this.name = name;
42     }
43 
44     public double getSalary() {
45         return salary;
46     }
47 
48     public void setSalary(double salary) {
49         this.salary = salary;
50     }
51 
52     public Date getHireDay() {
53         return hireDay;
54     }
55 
56     public void setHireDay(Date hireDay) {
57         this.hireDay = hireDay;
58     }
59 
60 }

最终结果:

Mon Oct 24 00:00:00 CST 1994
Sat Jan 24 11:41:40 CST 1970
Sat Jan 24 11:41:40 CST 1970

说明hireDay已经改变,将其get方法改为

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

  结果为:

Mon Oct 24 00:00:00 CST 1994
Sat Jan 24 11:41:40 CST 1970
Mon Oct 24 00:00:00 CST 1994

注意不要编写返回引用可变对象的访问器方法

标签:

原文地址:http://www.cnblogs.com/astro8116/p/4597770.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!