当前位置:  开发笔记 > 编程语言 > 正文

Java中可变对象的封装

如何解决《Java中可变对象的封装》经验,为你挑选了1个好方法。

我正在学习"Java SE 7程序员I和II学习指南",我不明白下面的解释.

class Fortress{
  private String name;
  private ArrayList list;

  Fortress?? {list=new ArrayList;

  String getName{return name;}
  void addToList(int x){list.add(x);}
  ArrayList getList(){return list;} // line 1
}

哪行代码打破了封装?答案:第9行."当封装像ArrayList这样的可变对象时,你的getter必须返回对对象副本的引用,而不仅仅是对原始对象的引用".

我没有理解解释或如何修改原始代码.

所以在getList()而不是

return list;

我们应该这样做吗?

ArrayList list2=list;
return list2;

Pace.. 9

你会替换:

return list;

有:

return new ArrayList(list);

否则客户可以做...

foo.getList().add(5);

打破封装.



1> Pace..:

你会替换:

return list;

有:

return new ArrayList(list);

否则客户可以做...

foo.getList().add(5);

打破封装.

推荐阅读
低调pasta_730
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有