#java #android
Я уже не раз встречал, но только вот подумал... А что означает такая конструкция, когда допустим в методе один из параметров имеет модификатор доступа final... Ведь в любом случае при повторном вызове метода ему можно передать новое значение...
Ответы
Ответ 1
Если указан параметр final когда объявляется переменная, то его нельзя будет изменить. public void i1(final String i1) { i1 = ""; // ошибка компиляции } Также параметр final даёт к себе доступ анонимным классам. Знаю такой пример на Android при запуске Activity: @Override protected void onCreate(final Bundle i1) { super.onCreate(i1); setContentView(R.layout.layout_i1); new AlertDialog.Builder(this) .setTitle(getString(R.string.app_name)) .setPositiveButton("ОК", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface i2, int i3) { i1.clone(); // вот тут можем его получить Только потому, что у Bundle i1 указан параметр final return; } }) .setNegativeButton("Выход", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface i1, int i2) { i1.cancel(); finish(); return; } }) .create() .show(); } Ведь если заменить эту строку protected void onCreate(final Bundle i1) { на это protected void onCreate(Bundle i1) { то вот здесь @Override public void onClick(DialogInterface i2, int i3) { i1.clone(); <<<--------- в этой строке return; } будет ошибка компиляции.Ответ 2
Если у параметра в методе нет модификатора final, то переменную можно будет подменить другим объектом. Например: void f(String x){ x = "New"; System.out.println(x); //"New" } Модификатор final у параметра исключает эту возможность void f(final String x){ x = "New"; // ошибка компиляции }Ответ 3
В прототипе метода, аргументы которые имеют модификатор final, нельзя переопределить в теле метода. А вообще, модификатор final, подсказывает компилятору, чтобы он сразу знал, что переменная, метод или класс - только для чтения. Переменные final не инициализируются по умолчанию, им необходимо явно присвоить значение при объявлении или в конструкторе, иначе – ошибка компиляции.Ответ 4
Это нужно для уверенности, что во время выполнения метода нигде не было переопределенно значение аргумента , например. public static String method(final String city) { city = "Moscow"; //ошибка return city; }Ответ 5
На пример что бы можно было сделать так: void method(final int i) { mMember.setListener(new Listener() { public void call() { System.out.println(i); } }); }
Комментариев нет:
Отправить комментарий