Sobes.tech
Junior

Was sind unveränderliche Objekte (immutable)?

sobes.tech KI

Antwort von AI

Objekte, deren Zustand nach der Erstellung nicht geändert werden kann. Bei einem Änderungsversuch wird immer ein neues Objekt erstellt.

Beispiele für unveränderliche Klassen in Java:

  • String
  • Primitive Wrapper (Integer, Long, Boolean usw.)
  • Einige Sammlungen (Collections.unmodifiableList(), ImmutableList aus Guava)

Vorteile:

  • Thread-Sicherheit (benötigt keine Synchronisation bei gemeinsamem Zugriff).
  • Einfachheit in der Verwendung (leicht verständlicher Zustand des Objekts).
  • Können als Schlüssel in HashMap oder Elemente in Set verwendet werden (ihre hashCode und equals() ändern sich nicht).
  • Verbessern die Leistung durch Caching und Wiederverwendung.

Nachteile:

  • Die Erstellung eines neuen Objekts bei jeder Änderung kann ineffizient sein bei häufigen Änderungen.

Eigene Erstellung:

  • Klasse als final deklarieren.
  • Alle Felder privat und final deklarieren.
  • Keine Setter-Methoden bereitstellen.
  • Bei veränderlichen Feldern in Gettern Kopien zurückgeben, nicht Referenzen auf die Originalobjekte.
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;
        // Kopie erstellen, um Änderungen von außen zu vermeiden
        this.hobbies = new ArrayList<>(hobbies);
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public List<String> getHobbies() {
        // Unveränderliche Liste zurückgeben
        return Collections.unmodifiableList(hobbies);
    }
}