77.    final (palabra reservada)

Es un calificativo que se puede aplicar a variables, métodos o clases y quiere decir que es invariable.

final class

Cuando una clase se califica como final, no puede ser extendida. Tobos los miembros de una clase final pasan a ser finales.

final método

Cuando un método se califica como final, no puede ser redefinido si la clase a la que pertenece fuera extendida por otra clase.

La ventaja que aporta el calificativo final es que impide el polimorfismo pues al no poder ser redefinidos los métodos, nunca habrá sorpresas en tiempo de ejecución.

final variable de clase

La variable se convierte en constante. Debe ser inicializada o bien junto a la propia definición, o en la zona static de inicialización de variables.

final variable de objeto

La variable se convierte en constante. Debe ser inicializada o bien junto a la propia definición, o bien en todos y cada uno de los constructores de la clase.

final argumento formal de un método

El argumento se convierte en constante, dentro del método; es decir, su valor no puede ser modificado.

final variable local (o automática)

La variable se convierte en constante; es decir, su valor no puede modificarse.

La identificación de elementos finales puede proporcionar alguna mejora en tiempo de ejecución pues se evitan los algoritmos de resolución de polimorfismo y el compilador puede optimizar el código. No obstante, hay que advertir que estas mejoras suelen ser muy modestas.

NOTA. Un error frecuente consiste en declarar como final una variable que es referencia a un objeto y luego pensar que el objeto no puede ser modificado. Final sólo garantiza que la variable siempre referenciará el mismo objeto, independientemente de que el objeto en sí evolucione.

    Set<String> diccionario(String idioma) {

        final Set<String> frases = new HashSet<String>();

        if (idioma.equalsIgnoreCase("español")) {

            frases.add("hola");

            frases.add("adiós");

        }

        if (idioma.equalsIgnoreCase("english")) {

            frases.add("hi");

            frases.add("bye");

        }

        // frases = ...;    provocaría un error de re-asignación

        return frases;

    }     

 

Temas relacionados

Vademécum