После передачи объекта в метод, я хотел бы изменить одно из его полей. Какая наилучшая практика для выполнения этой задачи в Java?
Какова наилучшая практика для изменения объекта, переданного методу
Ответ 1
Простой ответ
Как указано в других ответах, вы можете просто вызвать метод setter.
Более философский ответ
Как правило, может быть опасно мутировать объекты в области, отличной от той, в которой они были созданы:
http://en.wikipedia.org/wiki/Functional_programming
Тем не менее, часто бывают случаи, когда вы просто хотите инкапсулировать биты логики в одну и ту же логическую область, где вы хотите изменить значения переданного объекта. Поэтому правило, которое я бы использовал, состоит в том, что до тех пор, пока все вызовы код полностью знает о таких мутациях, вы можете вызвать метод setter для объекта (и вы должны создать метод setter, если у вас его нет) в методе, которому вы передаете объект.
В общем случае, если вы вызываете функцию, которая мутирует параметры из нескольких мест в вашей кодовой базе, вы обнаружите, что она становится все более склонной к ошибкам, поэтому функциональное программирование окупается.
Итак, мораль этой истории: если ваш вызывающий (-ы) полностью осведомлен о таких мутациях, вы можете изменить значение в своем методе, но в целом вы должны попытаться избежать этого и вместо этого изменить его в области в котором он был создан (или создать копию).
Ответ 2
Помните, что даже если объект передан как окончательный, он все равно может быть изменен. Вы просто не можете переназначить переменную, которая обычно требуется для параметра (ввода/вывода).
Взяв пример Джигара Джошиса:
public void increasePersonAgeByOneMonth(final Person p ){
p = new Person(); //this won't work, which is ok since otherwise the parameter itself would not be changed by the next method
p.setAge(((p.getAge()*12.0) + 1)/12.0); //ok
}