Pregunta

Me acabo de encontrar un código que me confunde ligeramente; Realmente hay 2 variaciones que me gustaría aclarar.

Ejemplo 1:

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

¿Cuál sería el propósito de declarar file "final"? Dado que las primitivas de Java se pasan por valor, y getAbsolutePath() solo está devolviendo un String, la variable no será final En el otro lado (método de llamadas), ¿lo hará? Y desde el file Variable solo existe dentro del alcance de estas 2 líneas, realmente no puedo ver ningún propósito del final palabra clave. ¿Se me escapa algo? ¿Alguien ve una razón para hacer esto?

Ejemplo 2:

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

Dado que aquí se devuelve el objeto real ... ¿eso significa el file La variable será constante/final Por otro lado...? No parece tener sentido.

En general, me parece que pasas una variable, sin que Es el tipo de acceso. Como en, puedo tener un private variable en una función con un public Obtenga la función que lo devuelve, pero la variable que la recibe llamando a la función tiene que especificar un modificador de acceso. Entonces si especifica public, la variable devuelta será public en ese alcance. Si especifica private, la variable devuelta será private en ese alcance. ¿Hay alguna diferencia con final? ¿Es la "constancia" de una variable algo que se puede pasar? Esto me parece bastante improbable, considerando lo que sé de Java.

O me estoy perdiendo el punto por completo y hay algún otro propósito del final ¿Palabra clave en el código anterior?

Editar:

Volví al desarrollador original que escribió el código, y él dijo que solo puso el final Palabra clave porque originalmente había pensado que el método sería mucho más largo y quería asegurarse de que el archivo se mantuviera constante en todo momento. También dijo que generalmente declara variables que no deberían cambiarse como final, como regla, en todos los ámbitos y en principio, un punto que ambas respuestas a continuación mencionadas. Así que parece que estaba leyendo demasiado en una palabra clave adicional simple incluida por razones de estándares. ¡Gracias a todos!

¿Fue útil?

Solución

Algunas personas pueden decirle que hay un beneficio de rendimiento al usar Final, pero eso no está, de ninguna manera, demostrado de manera concluyente.

El beneficio principal del final La palabra clave es que el programador indique que no se debe cambiar una clase, método o campo.

Tenga en cuenta que declarar una variable final no hace que el objeto referenciado sea inmutable. Simplemente significa que la variable no puede tener su valor reasignado. Aún puede ejecutar métodos de la variable file que podría cambiar el File objeto internamente.

En los dos métodos que das, no veo valor en hacer el file variable final. Algunas convenciones de código abogan por hacer toda variable final a menos que la necesidad de ser modificado. Algunas personas no se suscriben a eso. Lo considero una variación en el principio de precaución.

Otros consejos

final en este caso solo significa que la referencia local file será inmutable. No tiene significado fuera del método. Algunas convenciones de codificación abogan por tener todas las variables finales a menos que necesiten ser mutables, por lo que verá un código así cuando alguien sigue tales pautas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top