Ответ 1
Простой ответ
Как указано в других ответах, вы можете просто вызвать метод setter.
Более философский ответ
Как правило, может быть опасно мутировать объекты в области, отличной от той, в которой они были созданы:
http://en.wikipedia.org/wiki/Functional_programming
Тем не менее, часто бывают случаи, когда вы просто хотите инкапсулировать биты логики в одну и ту же логическую область, где вы хотите изменить значения переданного объекта. Поэтому правило, которое я бы использовал, состоит в том, что до тех пор, пока все вызовы код полностью знает о таких мутациях, вы можете вызвать метод setter для объекта (и вы должны создать метод setter, если у вас его нет) в методе, которому вы передаете объект.
В общем случае, если вы вызываете функцию, которая мутирует параметры из нескольких мест в вашей кодовой базе, вы обнаружите, что она становится все более склонной к ошибкам, поэтому функциональное программирование окупается.
Итак, мораль этой истории: если ваш вызывающий (-ы) полностью осведомлен о таких мутациях, вы можете изменить значение в своем методе, но в целом вы должны попытаться избежать этого и вместо этого изменить его в области в котором он был создан (или создать копию).