Junior
Czym są obiekty niemutowalne (immutable)?
sobes.tech AI
Odpowiedź od AI
Obiekty, których stan nie może być zmieniony po utworzeniu. Przy próbie modyfikacji zawsze tworzony jest nowy obiekt.
Przykłady niezmiennych klas w Java:
String- Opakowania prymitywne (
Integer,Long,Booleanitd.) - Niektóre kolekcje (
Collections.unmodifiableList(),ImmutableListz Guava)
Zalety:
- Bezpieczeństwo wątków (nie wymagają synchronizacji przy współdzielonym dostępie).
- Łatwość użycia (stan obiektu jest łatwy do zrozumienia).
- Mogą być używane jako klucze w HashMap lub elementy Set (ich hashCode i equals() nie zmieniają się).
- Poprawiają wydajność dzięki możliwości cache'owania i ponownego użycia.
Wady:
- Tworzenie nowego obiektu przy każdej modyfikacji może być nieefektywne przy częstych zmianach.
Tworzenie własne:
- Zadeklarować klasę jako
final. - Zadeklarować wszystkie pola jako prywatne i
final. - Nie udostępniać metod-setterów.
- W getterach dla pól mutowalnych zwracać kopie, a nie odwołania do oryginalnych obiektów.
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;
// Tworzymy kopię, aby uniknąć zmian z zewnątrz
this.hobbies = new ArrayList<>(hobbies);
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public List<String> getHobbies() {
// Zwracamy niezmienną listę
return Collections.unmodifiableList(hobbies);
}
}