Sobes.tech
Junior

Wat zijn onveranderlijke objecten (immutable)?

sobes.tech AI

Antwoord van AI

Objecten waarvan de toestand niet kan worden gewijzigd nadat ze zijn gemaakt. Bij een wijzigingspoging wordt altijd een nieuw object gemaakt.

Voorbeelden van onveranderlijke klassen in Java:

  • String
  • Primitieve wrappers (Integer, Long, Boolean, enz.)
  • Sommige collecties (Collections.unmodifiableList(), ImmutableList van Guava)

Voordelen:

  • Threadveiligheid (vereist geen synchronisatie bij gelijktijdige toegang).
  • Gebruiksgemak (gemakkelijk te begrijpen toestand van het object).
  • Kan worden gebruikt als sleutels in HashMap of elementen in Set (hun hashCode en equals() veranderen niet).
  • Verbeteren de prestaties door caching en hergebruik.

Nadelen:

  • Het creëren van een nieuw object bij elke wijziging kan inefficiënt zijn bij frequente wijzigingen.

Eigen creatie:

  • Declareer de klasse als final.
  • Declareer alle velden privé en final.
  • Bied geen setter-methoden aan.
  • In getters voor mutable velden, retourneer kopieën in plaats van referenties naar de originele objecten.
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;
        // Maak een kopie om externe wijzigingen te voorkomen
        this.hobbies = new ArrayList<>(hobbies);
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public List<String> getHobbies() {
        // Retourneer een ongewijzigde lijst
        return Collections.unmodifiableList(hobbies);
    }
}