У меня есть вопрос о мутировании параметров-параметров (которые являются объектами) в методе.
Я много раз читал и слышал, что это плохая практика - мутировать объект в методе, который был передан как параметр. Как пример:
public void modifyList(List<Object> list) {
list.add(new Object());
}
Вместо этого переданный объект должен быть скопирован, мутация должна быть выполнена на скопированном объекте, и скопированный объект должен быть возвращен. Как пример:
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;
}
Я понимаю, что второй метод имеет меньший потенциал для побочных эффектов, потому что он не изменяет входной параметр.
Но так ли это на самом деле? Производительность пострадает, потому что нужно создать много глубоких копий. Кроме того, реализация копирующих конструкторов и реализация методов-клонов для всех классов будет стоить много времени. Также это увеличило бы LOC.
На практике я не часто вижу этот шаблон (скопируйте метод-параметр).
Может ли кто-нибудь с большим опытом (много лет работающий программистом / разработчиком программного обеспечения) ответить на этот вопрос?
Поздравления
Maverin