不可变的对象有很多好处,像我们最熟悉的String对象就是一个不可变的对象,这篇文章主要讲解怎么创建我们自己的不可变对象。对于不可变对象的好处,这里不做详细解释。
Java要创建不可变的对象需要满足下面几个条件:
1. 这个类被声明成final,不可以被继承,也不可以重载它的方法
2. 这个类的成员变量都是final并且是私有的
3. 如果成员变量是一个引用类型,是可变的,那么在他的getter()方法中,返回的是对该对象的拷贝,这里作一个简单的解释,为什么成员变量是final的,引用对象还需要取的时候Copy了,因为final只能保证引用不变,但不能保证引用对象本身不变。
看下面的代码,一个简单的不可变类,创建的对象就是不可变对象,其中特别注意Date对象,是一个引用对象,如果GetBoB方法中不做copy,那么我们得到这个对象的引用后就可以改变这个Date的值了,虽然引用并没有改变。
public final class BrokenPerson
{
private final String firstName;
private final String lastName;
private final Date dob;
public BrokenPerson( String firstName,
String lastName, Date dob)
{
this.firstName = firstName;
this.lastName = lastName;
this.dob = dob;
}
public String getFirstName()
{
return this.firstName;
}
public String getLastName()
{
return this.lastName;
}
public Date getDOB()
{
return new Date( this.dob.getTime() );
}
}