【发布时间】:2010-07-11 21:15:40
【问题描述】:
考虑这段代码sn-p:
class MyClass{
private List myList;
//...
public List getList(){
return myList;
}
}
由于Java通过值传递对象引用,我的理解是任何调用getList()的对象都将获得对myList的引用,允许它修改myList,尽管它是private。对吗?
而且,如果它是正确的,我应该使用
return new LinkedList(myList);
创建一个副本并传回对副本的引用而不是原始引用,以防止未经授权访问myList引用的列表?
【问题讨论】:
-
从技术上讲,没有外部客户端能够更改您班级中字段 myList 的值。它始终是 List 的句柄/引用,引用 MyClass 中的某些代码设置的列表。外部客户端将能够修改该列表的内容
-
是的,这就是我的意思,但我的解释有点草率。我会编辑它
-
+1 Miro A 以获得正确的说明。是的,您通过创建列表副本的解决方案是正确的(对于您想要实现的目标)。