相关疑难解决方法(0)

在方法(Java 中)中改变对象参数是一种不好的做法吗?

我有一个关于改变方法中的方法参数(它们是对象)的问题。

我多次阅读和听到,在作为参数传入的方法中改变对象是一种不好的做法。例如:

public void modifyList(List<Object> list) {
    list.add(new Object());
}
Run Code Online (Sandbox Code Playgroud)

相反,应该复制传入的对象,应该对复制的对象执行突变,然后返回复制的对象。例如:

public List<Object> getModifiedList(List<Object> list) {
    List copy = new List<Object();
    //Make a deep copy if it would be necessary
    for(Object o : list) {
        copy.add(o.clone());
    }
    //Modify the copy
    copy.add(new Object());
    //return the copy
    return copy;
}
Run Code Online (Sandbox Code Playgroud)

我知道第二种方法产生副作用的可能性较小,因为它不会改变输入参数。

但这真的是正确的方法吗?由于必须创建大量深层副本,性能会受到影响。此外,为所有类实现复制构造函数和克隆方法会花费大量时间。它还会极大地增加LOC。

在实践中,我不经常看到这种模式(复制方法参数)。

有丰富经验的人(作为程序员/软件开发人员工作多年)可以回答这个问题吗?

问候马维林

java copy method-parameters

9
推荐指数
2
解决办法
1万
查看次数

标签 统计

copy ×1

java ×1

method-parameters ×1