¿Una variable final aprobada en Java Stay Final en el otro lado?
-
21-09-2019 - |
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!
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.