gpt4 book ai didi

java - Java中可变对象的封装

转载 作者:搜寻专家 更新时间:2023-11-01 01:16:07 25 4
gpt4 key购买 nike

我在学习《Java SE 7 Programmer I & II Study Guide》,下面的解释没看懂。

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);

打破封装。

关于java - Java中可变对象的封装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34503190/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com