final in Java viene utilizzato per:
Caratteristiche e dettagli:
final deve essere inizializzata al momento della dichiarazione o nel costruttore;final non consente di cambiare il riferimento, ma l'oggetto referenziato può essere modificato (se non è immutabile!);final (come String, Math) non è possibile;final, anche se la classe è ereditata.final class A {} // non è possibile fare class B extends A class Parent { final void foo() { } } class Child extends Parent { // void foo() {} // errore: non è possibile sovrascrivere foo } final int COUNT = 10;
È possibile cambiare lo stato dell'oggetto a cui fa riferimento una variabile final?
Risposta: Sì, se si tratta di un oggetto non immutabile. Ad esempio:
final List<String> names = new ArrayList<>(); names.add("Vasya"); // Questo è consentito — l'oggetto referenziato viene modificato, ma non il riferimento stesso names = new ArrayList<>(); // Errore di compilazione
Storia
Storia
Storia
È emersa la necessità di espandere l'API esterna, costruita su classi final. A causa di esse, l'estensione si è rivelata impossibile, costringendo a duplicare la logica e mantenere due rami indipendenti del prodotto, complicando le migrazioni.