Junior
Čo sú nemenné objekty (immutable)?
sobes.tech AI
Odpoveď od AI
Objekty, ktorých stav nie je možné zmeniť po ich vytvorení. Pri pokuse o modifikáciu sa vždy vytvorí nový objekt.
Príklady nemenných tried v Jave:
String- Primitívne obaly (
Integer,Long,Booleanatď.) - Niektoré kolekcie (
Collections.unmodifiableList(),ImmutableListz Guava)
Výhody:
- Bezpečnosť vlákien (nevyžadujú synchronizáciu pri súbežnom prístupe).
- Jednoduchosť použitia (stav objektu je ľahko pochopiteľný).
- Môžu byť použité ako kľúče v HashMap alebo prvky v Set (ich hashCode a equals() sa nemenia).
- Zlepšujú výkon pomocou cacheovania a opätovného použitia.
Nevýhody:
- Vytváranie nového objektu pri každej zmene môže byť neefektívne pri častých zmenách.
Vlastné vytváranie:
- Vyhláste triedu ako
final. - Vyhláste všetky polia ako súkromné a
final. - Neposkytujte metódy setter.
- V getteroch pre mutovateľné polia vracajte kópie, nie 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;
// Vytvárame kópiu, aby sme zabránili zmenám zvonku
this.hobbies = new ArrayList<>(hobbies);
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public List<String> getHobbies() {
// Vrátime nemenný zoznam
return Collections.unmodifiableList(hobbies);
}
}