Junior
Co jsou neměnné objekty (immutable)?
sobes.tech AI
Odpověď od AI
Objekty, jejichž stav nelze po vytvoření změnit. Při pokusu o modifikaci je vždy vytvořen nový objekt.
Příklady neměnných tříd v Javě:
String- Primitivní obaly (
Integer,Long,Booleanatd.) - Některé kolekce (
Collections.unmodifiableList(),ImmutableListz Guava)
Výhody:
- Bezpečnost vláken (nevyžadují synchronizaci při souběžném přístupu).
- Jednoduchost použití (stav objektu je snadno pochopitelný).
- Mohou být použity jako klíče v HashMap nebo prvky v Set (jejich hashCode a equals() se nemění).
- Zlepšují výkon díky cachování a opětovnému použití.
Nevýhody:
- Vytváření nového objektu při každé modifikaci může být neefektivní při častých změnách.
Vytvoření vlastního:
- Deklarujte třídu jako
final. - Deklarujte všechna pole jako soukromá a
final. - Neposkytujte metody setter.
- V gettere pro mutabilní pole vracejte kopie, nikoli odkazy na původní objekty.
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;
// Vytvoření kopie, aby se zabránilo změnám zvenčí
this.hobbies = new ArrayList<>(hobbies);
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public List<String> getHobbies() {
// Vracíme neměnitelný seznam
return Collections.unmodifiableList(hobbies);
}
}