Java中可变对象的封装

sevenxuguang

我正在学习《 Java SE 7程序员I和II学习指南》,但我不理解下面的解释。

class Fortress{
  private String name;
  private ArrayList<Integer> list;

  Fortress() {list=new ArrayList<Integer>;

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

哪几行代码破坏了封装?答案:第9行。“封装诸如ArrayList之类的可变对象时,您的getter必须返回对该对象副本的引用,而不仅仅是对原始对象的引用”。

我既不理解解释,也不了解如何修改原始代码。

所以在getList()而不是

return list;

我们应该这样做吗?

ArrayList<Integer> list2=list;
return list2;
步伐

您将替换为:

return list;

和:

return new ArrayList<Integer>(list);

否则客户可以做...

foo.getList().add(5);

破坏封装。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

用Java封装对象?

来自分类Dev

在不可变对象Java中限制可变对象

来自分类Dev

Java中的强弱封装

来自分类Dev

如何使对象在Java中不可变

来自分类Dev

在Java中为可变对象设置Collection

来自分类Dev

如何使对象在Java中不可变

来自分类Dev

在Java中返回对可变对象的不变引用

来自分类Dev

集合中的可变对象

来自分类Dev

将可变参数的参数封装在类实例中

来自分类Dev

封装可变状态

来自分类Dev

JS在封装对象中查找键值对

来自分类Dev

Java中是否存在可变的URL / URI对象?

来自分类Dev

使用可变数量的对象在Java中解析JSON

来自分类Dev

C ++中可变对象的可变容器

来自分类Dev

克隆对象,该对象引用了Java中的另一个可变对象

来自分类常见问题

制作不可变的Java对象

来自分类Dev

使对象在Groovy中不可变

来自分类Dev

Erlang中的快速可变对象

来自分类Dev

对象中的公共可变字段

来自分类Dev

如何在Java中编码封装

来自分类Dev

Java Enterprise Project中的封装级别

来自分类Dev

引用Java中另一个可变对象的克隆对象

来自分类Dev

的Java Bean封装了许多对象为一,如何?

来自分类Dev

Java:OOP封装与无封装?

来自分类Dev

命令模式-为什么封装在对象中?

来自分类Dev

Scala-将数据封装在对象中

来自分类Dev

Scala-将数据封装在对象中

来自分类Dev

Coffeescript实例方法封装在对象中

来自分类Dev

为什么不可变对象的属性在Swift中是可变的?