Java 不可变对象

来源:互联网 发布:linux go 安装包下载 编辑:程序博客网 时间:2024/05/08 14:42

不可变对象:
1:一旦创建,对象的状态就不能被修改,任何的修改都会创建一个新的对象
2:类和类属性都应该是final类型
3:如果里面含有非immutable对象,那么客户端的调用都应该返回一个该对象的拷贝

不可变对象的好处:
1:线程安全
2:创建的对象可以做缓存处理,使用静态工厂方法valueOf()返回一个已经存在的对象

例一:

public final class ImmutableObject_1 {private final Date date;public ImmutableObject_1(Date date){this.date = new Date(date.getTime());}public Date getDate(){return (Date)date.clone(); //返回可变属性的拷贝}}

例二:

public class ImmutableObject_2 {private final Name name;public ImmutableObject_2(Name name){//this.name = name; 不能这样写this.name = new Name(name.getFirstName(), name.getLastName());}public Name getName(){return name.clone();  //返回可变属性的拷贝}public static void main(String[] args) {Name name = new Name("Jason", "Lin");ImmutableObject_2 immutable = new ImmutableObject_2(name);System.out.println(immutable.getName().getFirstName());immutable.getName().setFirstName("Harry");System.out.println(immutable.getName().getFirstName());}}class Name implements Cloneable{private String firstName;private String lastName;public Name(String firstName, String lastName){this.firstName = firstName;this.lastName = lastName;}public String getFirstName() {return firstName;}public void setFirstName(String firstName) {this.firstName = firstName;}public String getLastName() {return lastName;}public void setLastName(String lastName) {this.lastName = lastName;}public Name clone(){return new Name(this.firstName, this.lastName);}}


0 0
原创粉丝点击