Junior
Mis on muutumatud objektid (immutable)?
sobes.tech AI
Vastus AI-lt
Objektid, mille seisundis pēc to izveides nevar tikt mainīti. Mēģinot veikt modifikāciju, vienmēr tiek izveidots jauns objekts.
Neizmaināmu klases piemēri Java:
String- Primārās apvalka klases (
Integer,Long,Booleanutt.) - Dažas kolekcijas (
Collections.unmodifiableList(), GuavaImmutableList)
Priekšrocības:
- Vides drošība (neprasa sinhronizāciju koplietošanas gadījumā).
- Vienkāršība lietošanā (viegls objekta stāvokļa saprašana).
- Var tikt izmantoti kā atslēgas HashMap vai elementu Set (to haškods un equals() nemainās).
- Uzlabo veiktspēju, izmantojot kešatmiņu un atkārtotu izmantošanu.
Trūkumi:
- Jauna objekta izveide katru reizi, kad tiek veiktas modifikācijas, var būt neefektīva biežās izmaiņās.
Savu izveide:
- Deklarēt klasi kā
final. - Visus laukus padarīt privātus un
final. - Neļaut izmantot setteri.
- Getter metodēs atgriezt kopijas, nevis saites uz oriģinālajiem objektiem.
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;
// Izveido kopiju, lai novērstu izmaiņas ārpus klases
this.hobbies = new ArrayList<>(hobbies);
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public List<String> getHobbies() {
// Atgriezt neizmaināmu apvalku
return Collections.unmodifiableList(hobbies);
}
}