浏览 2167 次
锁定老帖子 主题:初学者 关于不可变类的疑惑
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2014-03-11
//可变类,所以导致Person类也变成了可变类 class Name { private String firstName; private String lastName; public Name(){} public Name(String firstName,String lastName) { this.firstName = firstName; this.lastName = lastName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getFirstName() { return this.firstName; } public void setLastName(String lastName) { this.lastName = lastName; } public String getLastName() { return this.lastName; } } /*public class Person0001 { private final Name name; public Person0001(Name name) { this.name = name; } public Name getName() { return name; } public static void main(String[] args) { Name n = new Name("悟空","孙"); Person0001 p = new Person0001(n); //Person对象的name的firstName值为“悟空” System.out.println(p.getName().getFirstName()); //改变Person对象的name的first值 n.setFirstName("八戒"); //Person对象的name的firstName值被改为"八戒" System.out.println(p.getName().getFirstName()); } 不难发现Person对象的name的firstName已经改变了,这就破坏了设计Person类的初衷 为了保持Person对象的不可变性,必须保护好Person对象的引用类型Field:name,让程序无法访问到Person对象的 name Field的可变性来改变Person对象了 }*/ public class Person0001 { private final Name name; public Person0001 (Name name) { //设置name Field为临时创建的Name对象,该对象firstName和lastName //与传入的name对象的firstName和lastName相同 this.name = new Name(name.getFirstName(),name.getLastName()); } public Name getName() { //返回一个匿名对象,该对象的firstName和lastName //与该对象里的name的firstName和lastName相同 return new Name(name.getFirstName(),name.getLastName()); } public static void main(String[] args) { Name n = new Name("悟空","孙"); Person0001 p = new Person0001(n); //Person对象的name的firstName值为“悟空” System.out.println(p.getName().getFirstName()); //改变Person对象的name的first值 n.setFirstName("八戒"); //Person对象的name的firstName值被改为"八戒" System.out.println(p.getName().getFirstName()); } } 能否帮忙 分析 一下 上面的代码 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2014-03-13
你的问题是什么?或者说你有什么疑惑?
|
|
返回顶楼 | |
发表时间:2014-03-13
对Name使用final指的是引用不变,不代表引用的内容不变
|
|
返回顶楼 | |