---
title: 'Immutable-Objekte und Wither-Methoden'
url: 'https://tutego.de/blog/javainsel/2019/02/immutable-objekte-und-wither-methoden'
markdown: 'https://tutego.de/blog/javainsel/2019/02/immutable-objekte-und-wither-methoden.md'
date: '2019-02-10'
description: 'Objekte, dessen Zustände nicht verändert werden können, heißen immutable. Die Klassen deklarieren in so einem Fall keine öffentlichen Variablen und auch keine Methoden mit Seiteneffekten, die diese Zustände modifizieren könnten. Setter gibt es folglich nicht, nur vielleicht Getter. Damit die Objekt…'
taxonomy:
  category:
    - Insel
---

# Immutable-Objekte und Wither-Methoden

![Illustration einer tropischen Insel mit Palmen und einem hohen Berg](https://tutego.de/blog/javainsel/user/themes/tutego/images/insel-cover.jpg)# Java Blog für Programmierer

[Java Blog für Programmierer](https://tutego.de/blog/javainsel/)

## Immutable-Objekte und Wither-Methoden

10.02.2019 · [Christian Ullenboom](https://tutego.de/blog/javainsel/author/admin/)

Objekte, dessen Zustände nicht verändert werden können, heißen immutable. Die Klassen deklarieren in so einem Fall keine öffentlichen Variablen und auch keine Methoden mit Seiteneffekten, die diese Zustände modifizieren könnten. Setter gibt es folglich nicht, nur vielleicht Getter.

Damit die Objekte ihre Werte bekommen, gibt es unterschiedliche Wege – parametrisierte Konstruktoren sind ein guter Weg. Die Belegungen lassen sich beim Konstruktoraufruf übergeben und so sehr gut direkt in finale Variablen schreiben. In der Java-Bibliothek gibt es eine Reihe solcher Klassen, die keinen parameterlosen Konstruktor besitzen, und nur einige parametrisierte, die Werte erwarten. Die im Konstruktor übergebenen Werte initialisieren das Objekt, und es behält diese Werte sein ganzes Leben lang. Zu den Klassen gehören zum Beispiel `Integer`, Double, Color, File oder Font.

Immutable-Objekte, die auch die `equals(…)`-Methode implementieren heißen Werteobjekt (engl. value object).

#### Wither-Methoden

Auch wenn sich Objekte mit Setten nicht ändern lassen, so soll es doch möglich sein, neue Objekte mit veränderten Zuständen zu erschaffen. Ein Blick auf die Klasse `String` zeigt zum Beispiel `trim()` und `toUpperCase()` – das Ergebnis sind neue Strings.

Um allgemein Zustandsvariablen zu verändern können Wither-Methoden verwendet werden; sie sind ähnlich wie Setter, nur verändern sie keinen Zustand am aktuellen Objekt, sondern führen zu einem neuen Objekt mit dem geänderten Zustand.

GetterSetterWither*Typ* `getXXX()`void `setXXX`(*Typ* xxx)*ImmutableTyp* `withXXX`(*Typ* xxx)

Namenskonvention der Getter, Setter, Wither für eine Property xxx

Dazu ein Beispiel. Ein Raum hat einen Namen und eine Größe. Die Exemplare sollen unveränderbar sein:

```java
class Room {

  private final String name;

  private final int size;

  public Room( String name, int size ) {

    this.name = name;

    this.size = size;

  }

  public String getName() {

    return name;

  }

  public int getSize() {

    return size;

  }

  public Room withName( String name ) {

    return new Room( name, size );

  }

  public Room withSize( int size ) {

    return new Room( name, size );

  }

}
```

Kategorien: [Insel](https://tutego.de/blog/javainsel/category/insel/)

## 2 Kommentare

**Christian Ullenboom** · [14.10.2019 00:29](#comment-729857) · [Antwort auf einen Kommentar](#comment-688760)

ups, danke

**Kurt Leistentritt** · [11.02.2019 09:46](#comment-688760)

The constructor(Room, int) is undefined. public Room withSize(int size) { return new Room(this.name, size); }

Die bisherigen Kommentare wurden aus WordPress übernommen. Neue Kommentare sind derzeit geschlossen.

[← Alle Beiträge](https://tutego.de/blog/javainsel/)

---

## Navigation

- Previous: [Eclipse GlassFish 5.1.0 ist fertig, die erste Jakarta EE Implementierung](https://tutego.de/blog/javainsel/2019/02/eclipse-glassfish-5-1-0-ist-fertig.md)
- Next: [JBoss EAP 7.2 mit Java EE 8-Untertützung freigegeben](https://tutego.de/blog/javainsel/2019/02/jboss-eap-7-2-mit-java-ee-8-red-hat.md)
