2011-06-28 7 views

Respuesta

27

Esto significa que dentro del método, no se puede asignar nuevos valores de los parámetros.

Una razón común para querer hacer esto es poder usar los parámetros dentro de anonymous inner classes que solo pueden hacer referencia a final variables locales, incluidos los parámetros.

Otra razón para hacer esto es si su estilo de codificación favorece la declaración de todas las variables locales como finales si es posible. (Personalmente trato de tratar como final, pero evite realmente declararlos de esa manera, ya que agrega cruft.)

+0

+1 Las razones para hacer esto. –

+0

Lo que me confunde es esto: creo que una final se puede cambiar a veces. IE, declaras una variable como definitiva para que un oyente de botones pueda usarla. En la ejecución, active ese oyente del botón. Luego cambia la variable. Luego activa ese oyente de botón. ¿No tiene un valor diferente la segunda vez? Si es así, ¿por qué? Si no ... bueno, supongo que es realmente inmutable y una vez que me lo digas, no me confundiré. – ArtOfWarfare

+0

@ArtOfWarfare: si ha declarado la variable como definitiva, * no puede * cambiarla. Si crees que puedes, debes escribir una pregunta por separado que demuestre eso. –

6

Significa que no puede cambiar las referencias. La cadena es inmutable, pero si el Auto es mutable puedes cambiar los campos en ese Auto, no puedes cambiarlo a otro Auto.

+2

+1 para señalar que String es inmutable por la API, pero si el automóvil no era inmutable, ¡los campos en su interior se pueden cambiar, de lo contrario, sin el modificador de acceso final! –

+2

PUEDE cambiar los campos incluso si la referencia es definitiva. Aquí es donde es diferente a 'const' en C++. –

0

Significa que la referencia de este objeto no se puede cambiar dentro del método.

0

Significa que no puede cambiar las referencias, pero no puede evitar que se modifique el objeto.

Cuestiones relacionadas