返回对象引用的最佳实践

chr*_*ney 8 java pass-by-reference

请考虑以下代码段:

class MyClass{
    private List myList;
    //...
    public List getList(){
        return myList;
    }
}
Run Code Online (Sandbox Code Playgroud)

当Java通过值传递对象引用时,我的理解是任何对象调用getList()都将获得myList对它的引用,允许它在myList不管它的情况下进行修改private.那是对的吗?

而且,如果它是正确的,我应该使用

return new LinkedList(myList);
Run Code Online (Sandbox Code Playgroud)

创建副本并传回对副本的引用,而不是原始副本,以防止未经授权访问引用的列表myList

duf*_*ymo 9

我这样做.更好的是,有时我使用Collections API返回一个不可修改的副本.

如果您不这样做,您的参考不是私人的.任何有参考的人都可以改变您的私人状态.对于任何可变引用(例如,Date)也是如此.

  • 如果提供原始集合的不可修改视图,请注意原始列表中的任何更改都将反映在视图中.使用不可变的集合,生活会变得如此简单...... (3认同)