Почему переменные, локальные для метода, не могут быть объявлены как final? - PullRequest
0 голосов
/ 25 января 2010

Мне нравится знать, почему локальные для метода переменные не могут быть объявлены как окончательные. Есть ли какая-то конкретная причина?

Означает ли это, что в Java нет локальных констант?

Ответы [ 4 ]

8 голосов
/ 25 января 2010

Они могут быть объявлены окончательными. Ваша настоящая проблема лежит где-то еще.

5 голосов
/ 25 января 2010

Из спецификации Java § 4.5.5 :

Переменная может быть объявлена ​​окончательной . Окончательная переменная может быть назначена только один раз. Это ошибка времени компиляции, если конечная переменная присваивается, если только она точно не назначена (§16) непосредственно перед присвоением.

Другими словами, это совершенно законно. Более того, считается лучшей практикой , чтобы максимально использовать final с локальными переменными.

Последовательное использование final с локальными переменными (при необходимости) также может быть полезным. [...] Разумный подход заключается в использовании final для локальных переменных, только если в методе есть хотя бы одна неконечная локальная переменная; это позволяет быстро отличить неокончательные локальные переменные от других.

1 голос
/ 25 января 2010

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

0 голосов
/ 07 апреля 2015

Глупая ошибка! Возможно, вы пропустили упоминание ссылочной переменной и жалобы на затмение, такие как «Синтаксическая ошибка в токене« final », неверный тип». Пример final Pojo = new Pojo();, в котором отсутствует ссылочная переменная, хотя он отлично работает, если final Pojo pojo = new Pojo(); Я уверен, что когда вы задали вопрос здесь, в SO, к тому времени вы не осознали эту глупую ошибку там.

...