Я ожидаю, что есть несколько причин, но это, вероятно, сводится к предотвращению ошибки программиста.
Одна вещь, которая может сбить с толку, - это «что будет значением obj после выполнения цикла»? В отличие от стандартного цикла for, расширенный цикл for-each не пытается гарантировать собственную механику.
Другое дело, что поля экземпляра представляют состояние объекта. При использовании поля экземпляра в цикле for-each можно сказать, что объект может перейти из одного состояния в одно или несколько промежуточных состояний, а затем в конечное состояние в течение одной операции . Это просто плохой дизайн, и его стоит предотвратить.
Почему бы не передать obj в качестве аргумента process()
?