我正在学习《 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] 删除。
我来说两句