Pergunta

Acabei de encontrar um código que está me confundindo um pouco;existem realmente duas variações que eu gostaria de esclarecer.

Exemplo 1:

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

Qual seria o propósito de declarar file "final"?Como as primitivas Java são passadas por valor, e getAbsolutePath() está apenas retornando um String, a variável não será final do outro lado (método de chamada), certo?E desde o file variável só existe dentro do escopo dessas 2 linhas, não consigo ver nenhum propósito da final palavra-chave.Tem algo que estou perdendo?Alguém vê uma razão para fazer isso?

Exemplo 2:

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

Já que aqui o objeto real está sendo retornado...Isso significa que file variável será constante/final por outro lado...?Não parece fazer sentido.

Em geral me parece que você passa uma variável, sem é o tipo de acesso.Tipo, eu posso ter um private variável em uma função com um public get que o retorna - mas a variável que o recebe ao chamar a função deve especificar um modificador de acesso.Então, se ele especifica public, a variável retornada será public nesse âmbito.Se especificar private, a variável retornada será private nesse âmbito.Existe alguma diferença com final?A “constância” de uma variável é algo que pode ser passado?Isso me parece bastante improvável, considerando o que sei sobre Java.

Ou estou perdendo totalmente o foco e há algum outro propósito do final palavra-chave no código acima?

Editar:

Verifiquei novamente com o desenvolvedor original que escreveu o código e ele disse que apenas colocou o final palavra-chave in porque ele originalmente pensou que o método seria muito mais longo e queria garantir que o arquivo permanecesse constante o tempo todo.Ele também disse que geralmente declara variáveis ​​que não devem ser alteradas como final, como regra geral e como princípio - um ponto que ambas as respostas abaixo mencionaram.Parece que eu estava lendo muito sobre uma simples palavra-chave extra incluída por motivos de padrão.Obrigado a todos!

Foi útil?

Solução

Algumas pessoas podem dizer que há um benefício de desempenho no uso do final, mas isso não está de forma alguma comprovado de forma conclusiva.

O principal benefício do final A palavra-chave serve para o programador indicar que uma classe, método ou campo não deve ser alterado.

Tenha em mente que declarar uma variável final não torna o objeto referenciado imutável.Significa apenas que a variável não pode ter seu valor reatribuído.Você ainda pode executar métodos da variável file isso poderia mudar o File objeto internamente.

Nos dois métodos que você fornece, não vejo valor em fazer o file variável final.Algumas convenções de código defendem a criação de todas as variáveis final a menos que seja necessário modificá-lo.Algumas pessoas não concordam com isso.Considero isso uma variação do princípio da precaução.

Outras dicas

final neste caso significa apenas que a referência local file será imutável.Não tem significado fora do método.Algumas convenções de codificação defendem que todas as variáveis ​​sejam finais, a menos que precisem ser mutáveis, para que você veja um código como esse quando alguém estiver seguindo essas diretrizes.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top