почему переменная в статическом методе должна быть объявлена ​​как финальная в Java - PullRequest
1 голос
/ 15 сентября 2010

У меня статический метод. В методе, в котором я декалирую переменную, в eclipse показывалось сообщение о том, что переменная должна быть декалифицирована как финальная.Могу ли я узнать причину этого, если переменная в статическом методе будет объявлена ​​как final?Я пишу приложение для Android, где я должен передать в качестве аргумента текущий контекст этого приложения.Итак, когда я передаю текущий контекст методу и пытаюсь скопировать его в локальную переменную, я получаю эту ошибку, говорящую, что переменная должна быть объявлена ​​как final.мой метод такой:

public static void myfunc(Context ctx, int a)  
{                                     
  Context myctx=ctx;                      
}     

ошибка отображается в строке, где Context myctx = ctx;объявлен и просит меня объявить его окончательным.

Ответы [ 4 ]

7 голосов
/ 15 сентября 2010

Не обязательно.Внутри статической функции может быть неконечная переменная.

Классический пример:

public static void main(String args[])
{
   int i = 10;
} 
6 голосов
/ 15 сентября 2010

Обычные настройки компилятора не делают этого. Вы не обязаны объявлять его окончательным.

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

И если у вас есть анонимный класс, созданный ниже переменной, и вы используете переменную там (но вы нам это не показываете) - тогда он должен быть объявлен как final.

2 голосов
/ 15 сентября 2010

Нет, дело не в этом.Вы можете создавать не финальные переменные в статических методах.

1 голос
/ 15 сентября 2010

Вероятно, он срабатывает, если вы объявляете переменную, а потом не изменяете ее.

Предполагается, что, объявив его окончательным, вы разрешите некоторые оптимизации JVM.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...