Что значит иметь окончательный входной параметр в сигнатуре метода? - PullRequest
15 голосов
/ 28 июня 2011

Какова будет причина сделать следующее:

public void processSomething(final String hello, final String two, final Car car){}

вместо:

public void processSomething(String hello, String two, Car car){}

Ответы [ 4 ]

27 голосов
/ 28 июня 2011

Это означает, что в методе вы не можете назначать новые значения параметрам.

Распространенная причина желания сделать это - возможность использовать параметры в анонимных внутренних классах., который может ссылаться только на final локальные переменные, включая параметры.

Другая причина для этого заключается в том, что если ваш стиль кодирования предпочитает объявлять все локальные переменные как окончательные, если это возможно.(Лично я пытаюсь трактовать как окончательный вариант, но избегать объявления их таким образом, так как это добавляет кавычки.)

6 голосов
/ 28 июня 2011

Это означает, что вы не можете изменить ссылки.String является неизменяемой, но если Car является изменяемой, вы можете изменить поля в этой Car, вы не можете изменить ее на другую.

0 голосов
/ 05 января 2013

Это означает, что вы не можете изменить ссылки, но не можете остановить изменение объекта.

0 голосов
/ 28 июня 2011

Это означает, что ссылка на этот объект не может быть изменена в методе.

...