Sobes.tech
Junior

Kā Java nodrošina nemainīgumu?

sobes.tech AI

Atbilde no AI

Java nodrošina imutabilitāti ar šādiem līdzekļiem:

  1. Klases paziņošana kā final: Klase nav iespējams mantoēt, kas novērš mutablu apakšklasēm veidošanos.

  2. Visu lauku paziņošana kā final: Lauks var tikt piešķirts tikai vienu reizi (inicializācijas vai konstruktorā) un pēc tam to vairs nevar mainīt.

  3. Lauku privātums: Lauki jābūt privātiem (private), lai novērstu tiešu piekļuvi un mainīšanu ārpus klases.

  4. Nav sētteru vai metožu, kas maina objekta stāvokli: Klase nedrīkst nodrošināt publiskas metodes, kas var mainīt objekta lauku vērtības pēc tā izveides.

  5. Pareiza mutablo lauku pārvaldība: Ja klase satur atsauces uz mutabliem objektiem (piemēram, List vai savu mutablo klasi), ir jā:

    • Izveido to kopijas inicializācijas laikā (konstruktors).
    • Atgriež to kopijas getteros, lai novērstu objekta iekšējā stāvokļa maiņu no ārpuses.
public final class ImmutableExample { // final klase

    private final String name; // final un privāts lauks

    private final List<String> items; // final un privāts lauks

    public ImmutableExample(String name, List<String> items) {
        this.name = name;
        // Izveidot aizsargātu mutablo saraksta kopiju
        this.items = new ArrayList<>(items);
    }

    public String getName() {
        return name;
    }

    public List<String> getItems() {
        // Atgriezt aizsargātu mutablo saraksta kopiju
        return Collections.unmodifiableList(new ArrayList<>(items));
    }

    // Nav sētteru vai stāvokļa maiņas metožu
}

Java iekšienē ir mutabli klases piemēri: String, primāro tipu apvalki (Integer, Long utt.), BigInteger, BigDecimal.