Junior
Milyen esetekben alkalmazható a final módosító Java-ban?
sobes.tech MI
Válasz az MI-től
A Java-ban a final módosítót a következő helyeken lehet alkalmazni:
-
Változók:
- Helyi változók: Értéküket egyszer adják meg, és az inicializálás után nem módosíthatók.
- Osztálymezők: Az értéküket deklarációkor vagy a konstruktorban adják meg, és ezután nem módosíthatók.
- Metódusparaméterek: Egy metóduson belüli paraméter állandóvá válik; nem lehet újra hozzárendelni a metóduson belül.
A
finalváltozók alkalmazása biztosítja:- Állandóság: Garancia arra, hogy az érték nem fog változni.
- Szálbiztonság: A
finalosztálymezők automatikusan láthatók minden szál számára a konstruktor befejezése után szinkronizáció nélkül. - Fordító optimalizációk: A fordító bizonyos optimalizációkat végezhet, mivel az érték nem fog változni.
-
Metódusok:
- Egy
final-ként deklarált metódus nem írható felül alosztályokban. - Ez hasznos a következők miatt:
- Váratlan viselkedésváltozások megelőzése: Biztosítja, hogy a metódus logikája változatlan maradjon.
- Összetétel ösztönzése: Azt ösztönzi, hogy összetételt használjunk az öröklés helyett.
- Fordító optimalizációk: A fordító inline-olhatja a
finalmetódusokat.
- Egy
-
Osztályok:
- Egy
final-ként deklarált osztály nem öröklődhet. - A
finalosztály alkalmazása a következőkre szolgál:- Állandó (immutable) osztályok létrehozása: Például primitív típusokat csomagoló osztályok (Integer, String).
- Tervezés védelme: Megakadályozza az osztály kiterjesztését, ami megsértheti az invariánsokat.
- Biztonság növelése: Biztosítja, hogy az osztály viselkedése nem változtatható meg alosztályok létrehozásával.
- Egy
| Alkalmazás | Leírás | Előnyök |
|---|---|---|
final mező |
Az érték egyszer van hozzárendelve (deklarációkor vagy a konstruktorban). | Állandóság, szálbiztonság, optimalizációk. |
final paraméter |
Az érték nem módosítható a metóduson belül. | Egyértelmű szignatúra, garancia az érték állandóságára. |
final metódus |
Nem írható felül alosztályokban. | Viselkedés változásának megelőzése, összetétel ösztönzése, optimalizációk. |
final osztály |
Nem öröklődhet (nem örökölhető). | Állandó osztály, tervezés védelme, biztonság növelése. |
Példák:
public class Example {
// final mező
private final String name;
// final primitív mező
private final int id;
// final, de hivatkozhat különböző List objektumokra
private final List<String> items;
// Fordítási időben állandó
public static final double PI = 3.14159;
public Example(String name, int id) {
this.name = name; // final mező értékadása
this.id = id; // final mező értékadása
this.items = new ArrayList<>(); // final lista mező inicializálása
}
// final metódus
public final void printDetails() {
System.out.println("Name: " + name + ", ID: " + id);
}
// final paraméterű metódus
public void addItem(final String item) {
// item = "új elem"; // fordítási hiba: Cannot assign a value to final variable 'item'
items.add(item);
}
}
// final osztály
// public final class ImmutableClass {
// private final int value;
//
// public ImmutableClass(int value) {
// this.value = value;
// }
//
// public int getValue() {
// return value;
// }
// }
// public class SubclassOfImmutable extends ImmutableClass { // fordítási hiba: Cannot inherit from final class
// }