Čím je zajištěna neměnnost v Javě?
sobes.tech AI
Odpověď od AI
Nezměnitelnost v Java je zajištěna následujícími způsoby:
-
Deklarace třídy jako
final: Třída nemůže být děděna, což zabraňuje vytváření mutabilních podtříd. -
Deklarace všech polí jako
final: Hodnota pole může být přiřazena pouze jednou (při inicializaci nebo v konstruktoru) a nemůže být po vytvoření objektu změněna. -
Soukromí polí: Pole by měla být soukromá (
private), aby se zabránilo přímému přístupu a změnám zvenčí třídy. -
Absence setterů nebo metod, které mění stav objektu: Třída by neměla poskytovat veřejné metody, které by mohly změnit hodnoty polí po jejich vytvoření.
-
Správná práce s mutabilními poli: Pokud třída obsahuje odkazy na mutabilní objekty (například
Listnebo vlastní mutabilní třídu), je nutné:- vytvářet jejich kopie při inicializaci (v konstruktoru)
- vracet jejich kopie v gettere, aby se zabránilo změnám vnitřního stavu objektu zvenčí.
public final class ImmutableExample { // konečná třída
private final String name; // final a soukromé pole
private final List<String> items; // final a soukromé pole
public ImmutableExample(String name, List<String> items) {
this.name = name;
// Vytvoření chráněné kopie měnitelného seznamu
this.items = new ArrayList<>(items);
}
public String getName() {
return name;
}
public List<String> getItems() {
// Vrácení chráněné kopie měnitelného seznamu
return Collections.unmodifiableList(new ArrayList<>(items));
}
// Chybí settery nebo metody měnící stav
}
Příklady vestavěných neproměnných tříd v Java: String, třídy obalující primitivní typy (Integer, Long, atd.), BigInteger, BigDecimal.