Sobes.tech
Junior

Čí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:

  1. Deklarace třídy jako final: Třída nemůže být děděna, což zabraňuje vytváření mutabilních podtříd.

  2. 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.

  3. 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.

  4. 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í.

  5. Správná práce s mutabilními poli: Pokud třída obsahuje odkazy na mutabilní objekty (například List nebo 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.