Подтвердить что ты не робот

Зачем объявлять аргумент функции окончательным?

В настоящее время я работаю над книгой "Teach Yourself Android Application Development за 24 часа", опубликованной Sams. Я относительно не знаком с Java, Android или другим. У меня очень хороший фон в ActionScript 3, который имеет достаточно сходство с Java, что сам язык не трудно понять, но у меня все еще есть некоторые вопросы об обосновании некоторых примеров кода в книге. Например, здесь функция, которая поставляется с образцом кода для Часа 9:

private void processScores(final TableLayout scoreTable, 
      XmlResourceParser scores) throws IOException, XmlPullParserException{

В этой сигнатуре функции авторы объявили аргумент scoreTable окончательным. Я немного озадачен, почему они это сделали. Мне не пришлось бы даже пытаться назначить новое значение аргументу функции scoreTable (он считался плохой практикой в ​​ActionScript). Кроме того, я на самом деле не видел, чтобы кто-либо делал это в любой реальной Java-среде, которую я изучил или портировал в AS3.

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

Почему объект TableLayout объявлен окончательным, но не XmlResourceParser?

4b9b3361

Ответ 1

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

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