Почему локальные переменные не объявлены окончательными в большинстве проектов Java с открытым исходным кодом? - PullRequest
6 голосов
/ 07 апреля 2011

Если я посмотрю на исходный код Java в OpenJDK, Hibernate или Apache, мне еще предстоит увидеть какие-либо локальные переменные, объявленные как final.

Это говорит о том, что разработчики некоторых из наиболее широко используемых программных продуктов Javaбиблиотеки:

  • не верят, что последнее ключевое слово улучшает читабельность.

  • не верят, что оно значительно повышает производительность.

Почему большинство контроллеров в stackoverflow считают, что его следует использовать (на основе ответов с наибольшим количеством голосов)?

Ответы [ 5 ]

5 голосов
/ 07 апреля 2011

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

final int x;

, когда печатать вдвое больше, чем

int x;

Мы, разработчики, ленивы, вы знаете ...: P

4 голосов
/ 07 апреля 2011

не верю, что последнее ключевое слово улучшает читабельность.

Некоторые люди (например, я) считают чрезмерное final s снижение читабельности.

doНе думаю, что это значительно повышает производительность.

final локальные переменные не улучшают производительность.

3 голосов
/ 07 апреля 2011

Насколько мне известно, последнее ключевое слово не влияет на время выполнения производительности ваших переменных.

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

2 голосов
/ 07 апреля 2011

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

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

2 голосов
/ 07 апреля 2011

Ключевое слово final имеет два варианта использования:

  1. объявляет класс или метод как окончательные, чтобы предотвратить подкласс / переопределение
  2. объявляет переменную как final, чтобы предотвратить ее изменение(присваивание нового значения)

Случай 2 обычно применяется к переменным-членам для того, чтобы сделать объект неизменным (хотя бы частично) или к параметрам метода, чтобы предотвратить случайные присвоения.

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

...