Mav*_*ode 9 java copy method-parameters
我有一个关于改变方法中的方法参数(它们是对象)的问题。
我多次阅读和听到,在作为参数传入的方法中改变对象是一种不好的做法。例如:
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。
在实践中,我不经常看到这种模式(复制方法参数)。
有丰富经验的人(作为程序员/软件开发人员工作多年)可以回答这个问题吗?
问候马维林
这两种方法都很好,并且根据您的用例可能是正确的选择。只需确保以明确意图的方式命名它们并编写一些 javadoc 即可。
然后由开发人员决定是否可以更改原始列表,如果不行,则传递副本或使用不同的方法。
例如, JDK 中的此方法会改变现有列表,但其意图和文档非常明确。
| 归档时间: |
|
| 查看次数: |
11925 次 |
| 最近记录: |