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,Booleanir kt.) - Kai kurios kolekcijos (
Collections.unmodifiableList(),ImmutableListiš 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);
}
}