final in Java wordt gebruikt voor:
Eigenschappen en nuances:
final variabele moet worden geïnitialiseerd bij declaratie of in de constructor;final referentie staat niet toe dat de referentie wordt gewijzigd, maar het object waar het naar verwijst kan worden gewijzigd (als het niet immutable is!);final klasse (bijvoorbeeld String, Math) is onmogelijk;final methode kan niet worden overschreven, zelfs niet als de klasse erfelijk is.final class A {} // kan geen class B extends A maken class Parent { final void foo() { } } class Child extends Parent { // void foo() {} // fout: kan foo niet retourneren } final int COUNT = 10;
Kan de toestand van het object waarvan de final variabele verwijst worden gewijzigd?
Antwoord: Ja, als het geen immutable-object is. Bijvoorbeeld:
final List<String> names = new ArrayList<>(); names.add("Vasya"); // Dit is toegestaan - het object waarnaar wordt verwezen verandert, maar de referentie zelf niet names = new ArrayList<>(); // Compilatiefout
Verhaal
Verhaal
Verhaal
Er kwam een vraag om de externe API, gebouwd op final klassen, uit te breiden. Door hen bleek het onmogelijk om uit te breiden, en moesten ze de logica dupliceren en twee onafhankelijke productvertakkingen onderhouden, wat de migraties bemoeilijkte.