Переданная последняя переменная в Java остаются окончательными с другой стороны?

Я только что столкнулся с некоторым кодом, это смущает меня немного; существует действительно 2 изменения, которые я хотел бы разъяснить.

Пример 1:

public String getFilepath(){
        final File file = new File(this.folder, this.filename);
        return file.getAbsolutePath();
    }

Какова была бы цель объявить file "final"? Так как примитивы Java передаются значением, и getAbsolutePath() просто возвращает a String, переменная не будет final с другой стороны (вызывающий метод), не так ли? И начиная с file переменная только существует в рамках этих 2 строк, я не могу действительно видеть цель final ключевое слово. Есть ли что-то, что я пропускаю? Кто-либо видит основания, чтобы сделать это?

Пример 2:

public String getFilepath(){
        final File file = new File(this.folder, this.filename);
        return file;
    }

Так как здесь фактический объект возвращается... Делает это означает file переменная будет постоянным /final с другой стороны...? Это, кажется, не имеет смысл.

В целом мне передачей переменной кажется без он - тип доступа. Как в, у меня может быть a private переменная в функции с a public получите функцию, которая возвращает его - но переменная, которая получает его путем вызывания функции, должна указать модификатор доступа. Таким образом, если это указывает public, возвращенная переменная будет public в том объеме. Если это указывает private, возвращенная переменная будет private в том объеме. Есть ли различие с final? "Постоянство" переменной - что-то, что может быть передано? Это кажется мне довольно невероятный, рассматривая то, что я знаю Java.

Или я упускаю суть полностью и существует некоторая другая цель final ключевое слово в вышеупомянутом коде?

Править:

Я перепроверил с исходным разработчиком, который написал код, и он сказал, что только поместил final ключевое слово в том, потому что он первоначально думал метод, будет намного дольше и требоваться, чтобы гарантировать, что файл остался постоянным повсюду. Он также сказал, что обычно объявляет переменные, которые не должны быть заменены как final, как правило, через плату и вид на принципе - точка, что оба ответы ниже упомянутого. Таким образом, кажется, что я читал слишком много в простое дополнительное ключевое слово, включенное по причинам стандартов. Спасибо все!

8
задан froadie 19 February 2010 в 16:12
поделиться

2 ответа

Некоторые люди могут сказать вам, что использование final дает преимущество в производительности, но это никоим образом не доказано окончательно.

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

Следует помнить, что объявление переменной final не делает ссылающийся объект неизменяемым. Это просто означает, что переменная не может переназначить свое значение. Вы все еще можете запускать методы переменной file, которые могут изменить объект File внутри.

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

3
ответ дан 5 December 2019 в 09:25
поделиться

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

15
ответ дан 5 December 2019 в 09:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: