final en Java est utilisé pour :
Particularités et subtilités :
final doit être initialisée lors de la déclaration ou dans le constructeur ;final n'autorise pas à changer la référence, mais l'objet référencé peut être modifié (s'il n'est pas immutable !) ;final (par exemple, String, Math) est impossible ;final, même si la classe est héritée.final class A {} // impossible de faire class B extends A class Parent { final void foo() { } } class Child extends Parent { // void foo() {} // erreur : impossible de redéfinir foo } final int COUNT = 10;
Peut-on modifier l'état d'un objet auquel une variable final référence ?
Réponse : Oui, si c'est un objet non-immutable. Par exemple :
final List<String> names = new ArrayList<>(); names.add("Vasya"); // C'est autorisé — l'objet référencé change, mais pas la référence elle-même names = new ArrayList<>(); // Erreur de compilation
Histoire
Histoire
Histoire
Une tâche est apparue pour étendre une API externe basée sur des classes final. À cause d'elles, le faire s'est avéré impossible, ce qui a obligé à dupliquer la logique et à maintenir deux branches de produit indépendantes, compliquant ainsi les migrations.