我正在学习"Java SE 7程序员I和II学习指南",我不明白下面的解释.
class Fortress{ private String name; private ArrayListlist; 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;
我们应该这样做吗?
ArrayListlist2=list; return list2;
Pace.. 9
你会替换:
return list;
有:
return new ArrayList(list);
否则客户可以做...
foo.getList().add(5);
打破封装.
你会替换:
return list;
有:
return new ArrayList(list);
否则客户可以做...
foo.getList().add(5);
打破封装.