Передача копии объекта в метод - кто делает копирование? - PullRequest
5 голосов
/ 08 октября 2008

У меня есть объект, который я передаю в вызове метода. Скажем, я использую язык, который позволяет передавать объекты только по ссылке, например, Java или PHP. Если метод вносит изменения в объект, это повлияет на вызывающего. Я не хочу, чтобы это случилось. Похоже, мне нужно сделать копию объекта.

Мой вопрос: кто несет ответственность за клонирование объекта? Вызывающий, прежде чем он вызывает метод? Или вызываемый, прежде чем он меняет объект?

РЕДАКТИРОВАТЬ: Просто чтобы уточнить, я хочу, чтобы это было частью контракта этого метода - что он никогда не изменяет исходный объект. Так что, похоже, все зависит от способа сделать копию. Но тогда у вызывающей стороны нет защиты от метода, который не делает это должным образом. Я думаю, что это приемлемо - похоже, единственной альтернативой является то, что это встроено в язык.

Ответы [ 11 ]

0 голосов
/ 08 октября 2008

Зависит, есть ли причина, по которой метод может быть вызван в будущем, когда вы хотите, чтобы вызывающее лицо увидело изменение? Если так, то вызывающая сторона должна сделать копию. В противном случае вызываемый должен сделать это. Я бы сказал, что второй случай, вероятно, более распространен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...