Будьте зациклены:
Рассматривают, но используют рассудительно:
Игнорируют если анальное ощущение себя:
Если у Вас есть внутренние (анонимные) классы, и для метода нужно к переменной доступа содержания метода, у Вас должна быть та переменная как финал.
Кроме этого, то, что Вы сказали, правильно.
Своего рода компромисс, как Вы упоминаете, но я предпочитаю конкретный вид использования чего-то по неявному использованию. Это поможет удалить некоторую неоднозначность для будущих специалистов по обслуживанию кода - даже если это будете просто Вы.
Не ясно из вопроса, очевидно ли это, но создание финала параметра метода влияет только на тело метода. Это делает НЕ , передают любую интересную информацию о намерениях метода к invoker. Объект, передаваемый в, может все еще быть видоизменен в рамках метода (финал не является consts), и объем переменной в рамках метода.
Для ответа на точный вопрос я не потрудился бы делать переменную экземпляра или локальную переменную (включая параметры метода) финалом, если код не потребовал его (например, на переменную ссылаются от внутреннего класса), или разъяснить некоторую действительно сложную логику.
, Например, переменные, я сделал бы их окончательными, если они - логически константы.
Я буду использовать финал так, как я могу. Выполнение так отметит при неумышленном изменении поля. Я также параметры метода установки к финалу. Выполнение, таким образом, я поймал несколько ошибок от кода, который я принял, когда они пытаются 'установить' параметр, забывая передачи Java значением.
Если Вы пишете приложение, что кто-то должен будет считать код после, скажем, 1 год, то да, используйте финал на переменной, которая не должна быть изменена все время. Путем выполнения этого код будет более "самодокументировать", и Вы также уменьшаете шанс для других разработчиков сделать глупые вещи как использование локальной константы как локальная временная переменная.
, Если Вы пишете, некоторый холостой код, тогда, nah, не потрудился определять всю константу и делать их окончательными.
Ну, это все зависит от Вашего стиля..., если Вам НРАВИТСЯ видеть финал, когда Вы не будете изменять переменную, затем используйте его. Если Вам не НРАВИТСЯ видеть, что он... затем пропускает его.
я лично как как можно меньше многословие, таким образом, я склонен избегать использования дополнительных ключевых слов, которые не действительно необходимы.
я предпочитаю динамические языки, хотя, таким образом, вероятно, не удивительно, что мне нравится избегать многословия.
Так, я сказал бы, просто выбирают направление, которое Вы склоняетесь к и просто идете с ним (безотносительно случая, попытайтесь быть последовательными).
<час>Как примечание стороны, я работал над проектами, что и используйте и не используйте такой шаблон, и я не видел различия в сумме ошибок или ошибок... Я не думаю, что это - шаблон, который чрезвычайно улучшит Ваше количество ошибки или что-либо, но снова это - стиль, и если Вам нравится выражать намерение, что Вы не измените его, затем идти вперед и использовать его.
Полезно в параметрах избежать, изменяют значение параметра случайно и представляют тонкую ошибку. Я использую для игнорирования этой рекомендации, но после пребывания в течение приблизительно 4 часов в ужасном методе (с сотнями строк кода и несколькими четверками, вложил IFS и весь вид плохих методов), я рекомендую Вам сделать это.
public int processSomethingCritical( final int x, final int y ){
// hundreds of lines here
// for loop here...
int x2 = 0;
x++; // bug aarrgg...
// hundreds of lines there
// if( x == 0 ) { ...
}
, Конечно, в идеальном мире этого не произошло бы, но.. хорошо.. иногда необходимо поддерживать код других.: (
Я нашел параметры метода выделения и местных жителей, поскольку final
полезно как помощь для рефакторинга, когда рассматриваемый метод является непостижимой путаницей несколько страниц длиной. Опрысните final
подробно, посмотрите то, что "не может присвоить последней переменной" ошибки, которые подбрасывает компилятор (или Ваш IDE), и Вы просто могли бы обнаружить, почему переменная, названная "данными", заканчивается пустой указатель даже при том, что несколько, которые (устарели), комментарии клянутся, что этого не может произойти.
Тогда можно зафиксировать некоторые ошибки путем замены снова использованных переменных новыми переменными, объявленными ближе на грани использования. Тогда Вы находите, что можно обернуть целые части метода в обзоре фигурных скобок, и внезапно Вы - одно нажатие клавиши IDE далеко от "Метода Извлечения", и Ваш монстр просто стал более понятным.
, Если Ваш метод уже не неудобная в сопровождении авария, я предполагаю, что могло бы быть значение в создании финала материала, чтобы отговорить людей превращать его в упомянутую аварию; но если это - сокращенный метод (см.: весьма удобный в сопровождении), тогда Вы рискуете добавлять много многословия. В частности, подписи функции Java достаточно тверды вписаться в 80 символов, как это, не добавляя еще шесть на аргумент!
Преимущества времени разработки "финала" являются, по крайней мере, столь же значительными как преимущества во время выполнения. Это говорит будущим редакторам кода что-то о Ваших намерениях.
отмечание класса "финал" указывает, что Вы не приложили усилие во время дизайна или реализации класса для обработки расширения корректно. Если читатели могут внести изменения в класс и хотеть удалить "заключительный" модификатор, они могут сделать так в их собственном риске. Их дело удостоверяться, что класс обработает расширение хорошо.
отмечание переменного "финала" (и присвоение его в конструкторе) полезно с внедрением зависимости. Это указывает на природу "сотрудника" переменной.
отмечание метода "финал" полезно в абстрактных классах. Это ясно формирует рисунок, где точки расширения.
он что-то, что я должен приложить усилие, чтобы не забыть делать?
нет, если Вы используете Eclipse, потому что можно настроить Действие Сохранения для автоматического добавления этих финал модификаторы для Вас. Тогда Вы извлекаете пользу для меньшего усилия.