Sobes.tech
Junior

Kas yra nekintami objektai (immutable)?

sobes.tech AI

Atsakymas iš AI

Objektai, kurių būseną galima pakeisti tik sukūrus. Bandant pakeisti, visada sukuriamas naujas objektas.

Pavyzdžiai nepakitusių klasių Java:

  • String
  • Priešdėlių apvalkalai (Integer, Long, Boolean ir kt.)
  • Kai kurios kolekcijos (Collections.unmodifiableList(), ImmutableList iš Guava)

Privalumai:

  • Srauto saugumas (nereikia sinchronizacijos bendro naudojimo atveju).
  • Paprasta naudoti (objekto būseną lengva suprasti).
  • Gali būti naudojami kaip raktai HashMap arba elementai Set (jų hashCode ir equals() nesikeičia).
  • Pagerina našumą naudojant talpyklą ir pakartotinį naudojimą.

Trūkumai:

  • Kuriant naują objektą kiekvieną kartą, kai keičiasi, gali būti neefektyvu dažnų pakeitimų atveju.

Savo sukūrimas:

  • Paskelbkite klasę kaip final.
  • Paskelbkite visus laukus kaip privačius ir final.
  • Nesuteikite sėtterių metodų.
  • Grąžinkite kopijas vietoj nuorodų į originalius objektus getteriuose.
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;
        // Sukuriame kopiją, kad išvengtume išorinių pakeitimų
        this.hobbies = new ArrayList<>(hobbies);
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public List<String> getHobbies() {
        // Grąžiname nepakitusią sąrašą
        return Collections.unmodifiableList(hobbies);
    }
}