Sobes.tech
Junior

Mis on muutumatud objektid (immutable)?

sobes.tech AI

Vastus AI-lt

Objektid, mille seisundis pēc to izveides nevar tikt mainīti. 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);
    }
}