Sobes.tech
Junior

Kas ir nemainīgi objekti (immutable)?

sobes.tech AI

Atbilde no AI

Objekti, kuru stāvokli pēc to izveides nevar mainīt. Mēģinot veikt modifikāciju, vienmēr tiek izveidots jauns objekts.

Neizmaināmu klases piemēri Java:

  • String
  • Primārās apvalka klases (Integer, Long, Boolean utt.)
  • Dažas kolekcijas (Collections.unmodifiableList(), Guava ImmutableList)

Priekšrocības:

  • Vides drošība (neprasa sinhronizāciju koplietošanas gadījumā).
  • Vienkāršība lietošanā (viegls objekta stāvokļa saprašana).
  • Var tikt izmantoti kā atslēgas HashMap vai elementu Set (to haškods un equals() nemainās).
  • Uzlabo veiktspēju, izmantojot kešatmiņu un atkārtotu izmantošanu.

Trūkumi:

  • Jauna objekta izveide katru reizi, kad tiek veiktas modifikācijas, var būt neefektīva biežās izmaiņās.

Savu izveide:

  • Deklarēt klasi kā final.
  • Visus laukus padarīt privātus un final.
  • Neļaut izmantot setteri.
  • Getter metodēs atgriezt kopijas, nevis saites uz oriģinālajiem objektiem.
public final class ImmutablePerson {
    private final String name;
    private final int age;
    private final List<String> hobbies;

    public ImmutablePerson(String name, int age, List<String> hobbies) {
        this.name = name;
        this.age = age;
        // Izveido kopiju, lai novērstu izmaiņas ārpus klases
        this.hobbies = new ArrayList<>(hobbies);
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public List<String> getHobbies() {
        // Atgriezt neizmaināmu apvalku
        return Collections.unmodifiableList(hobbies);
    }
}