Почему можно было бы отметить локальные переменные и параметры метода как “финал” в Java? [закрытый]

57
задан ordnungswidrig 21 November 2011 в 09:42
поделиться

10 ответов

Необходимо попытаться сделать это, каждый раз, когда это является соответствующим. Помимо обслуживания для предупреждения Вас, когда Вы "случайно" пытаетесь изменить значение оно предоставляет информацию компилятору, который может привести к лучшей оптимизации файла класса. Это - одна из точек в книге, "Жесткий Java" Robert Simmons Jr. На самом деле, книга тратит всю свою вторую главу по использованию финала, чтобы способствовать оптимизации и предотвратить логические ошибки. Инструменты статического анализа, такие как PMD и встроенный SA флага Eclipse эти виды случаев поэтому.

53
ответ дан rjray 24 November 2019 в 19:33
поделиться

В случае локальных переменных я склонен избегать этого. Это вызывает визуальную помеху и является вообще ненужным - функция должна быть достаточно короткой или внимание на единственное влияние, чтобы позволить Вам быстро видеть, что Вы, изменяют что-то, что не должно быть.

В случае магических чисел, я поместил бы их как постоянное частное поле так или иначе, а не в коде.

я только использую финал в ситуациях, где это необходимо (например, передавая значения анонимным классам).

6
ответ дан Uri 24 November 2019 в 19:33
поделиться

Мое личное мнение - то, что это - пустая трата времени. Я полагаю, что визуальная помеха и добавленное многословие не стоят того.

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

, Но, конечно, это - все персональное предпочтение;-)

27
ответ дан SCdF 24 November 2019 в 19:33
поделиться

Из-за (иногда) запутывающей природы Java" передача ссылкой " поведение я определенно соглашаюсь с завершением var параметра.

Завершающий локальный var кажется несколько излишеством IMO.

5
ответ дан Community 24 November 2019 в 19:33
поделиться

Да делают это.

Это об удобочитаемости. Легче рассуждать о возможных состояниях программы, когда Вы знаете, что переменные присвоены однажды и только однажды.

А достойная альтернатива должна включить IDE, предупреждающий, когда параметр присвоен, или когда переменная (кроме переменной цикла) присвоена несколько раз.

3
ответ дан Craig P. Motlin 24 November 2019 в 19:33
поделиться

финал имеет три серьезных основания:

  • переменные экземпляра, установленные конструктором только, становятся неизменными
  • , методы, которые не будут переопределены, становятся окончательными, используют это с настоящими причинами, не значением по умолчанию
  • , локальные переменные или параметры, которые будут использоваться в анонимных классах в методе, должны быть окончательные

Как методы, локальные переменные и параметры не должны быть объявлены финалом. Как другие сказали прежде, это создает помехи коду, становящемуся менее читаемым с очень небольшим усилием для оптимизации производительности компилятора, это не настоящая причина для большинства фрагментов кода.

2
ответ дан Arne Burmeister 24 November 2019 в 19:33
поделиться

Почему Вы хотели бы? Вы записали метод, таким образом, любой изменяющий его мог всегда удалять заключительное ключевое слово из стандартного расположения букв на клавиатуре и повторно присваивать его. Что касается сигнатуры метода, того же обоснования, хотя я не уверен, что это сделало бы к подклассам Вашего класса..., они могут наследовать заключительный параметр и даже если они переопределяют метод, неспособны к de-finalize x. Попробуйте его и узнайте, работало ли это.

единственная реальная выгода, тогда, то, если Вы делаете параметр неизменным, и это переносит на детей. Иначе Вы просто создаете помехи своему коду ни на каком особенно серьезном основании. Если это не вынудит никого следовать Вашим правилам, Вы более обеспечены просто отъезд хорошего комментария как Вы, почему Вы не должны изменять тот параметр или переменную вместо того, чтобы дать если заключительный модификатор.

Редактирование

В ответ на комментарий, я добавлю, что, если Вы видите, проблемы производительности, делая Ваш финал локальных переменных и параметров могут позволить компилятору оптимизировать Ваш код лучше. Однако с точки зрения неизменности Вашего кода, я поддерживаю свой исходный оператор.

0
ответ дан Elie 24 November 2019 в 19:33
поделиться

Я позволяю Eclipse сделать это для меня, когда они используются в анонимном классе, который увеличивается из-за моего использования Google Collection API.

0
ответ дан Miserable Variable 24 November 2019 в 19:33
поделиться

Мы делаем это здесь для локальных переменных, если мы думаем, что им не повторно присвоят или нельзя повторно присвоить.

параметры не являются окончательными, так как у нас есть Checkstyle-проверка, которая проверяет на переприсвоение параметров. Конечно, никто никогда не хотел бы повторно присвоить переменную параметра.

0
ответ дан boutta 24 November 2019 в 19:33
поделиться

Создание параметра final гарантирует , что значение, используемое в любом месте в методе, относится к переданному значению. В противном случае вам придется мысленно проанализировать весь код над заданным местоположением, чтобы узнать, какое значение имеет параметр в этой точке.

Следовательно, , а не , использование final делает ваш код менее читаемым и удобным в обслуживании, само по себе :)

Конечные локальные переменные зависят от намерения и, с моей точки зрения, менее важны. Зависит от того, что происходит.

8
ответ дан 24 November 2019 в 19:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: