---
title: 'this für kaskadierte Methoden und Builder'
url: 'https://www.tutego.de/blog/javainsel/2019/11/this-fuer-kaskadierte-methoden-und-builder'
markdown: 'https://www.tutego.de/blog/javainsel/2019/11/this-fuer-kaskadierte-methoden-und-builder.md'
date: '2019-11-06'
description: 'Die append(…)-Methoden bei StringBuilder liefern die this-Referenz, sodass sich Folgendes schreiben lässt: StringBuilder sb = new StringBuilder(); sb.append( "Android oder iPhone" ).append( ''?'' ); Jedes append(…) liefert das StringBuilder-Objekt, auf dem es aufgerufen wird – wir können also Methode…'
taxonomy:
  category:
    - Insel
---

# this für kaskadierte Methoden und Builder

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

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

## this für kaskadierte Methoden und Builder

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

Die `append(…)`-Methoden bei `StringBuilder` liefern die this-Referenz, sodass sich Folgendes schreiben lässt:

```java
StringBuilder sb = new StringBuilder();
sb.append( "Android oder iPhone" ).append( '?' );
```

Jedes `append(…)` liefert das `StringBuilder`-Objekt, auf dem es aufgerufen wird – wir können also Methoden kaskadiert anhängen oder es bleiben lassen.

Wir wollen diese Möglichkeit bei einem Zauberer (Klasse `Wizard`) programmieren, sodass die Methoden `name(String)` und `age(int)` Spielername und Alter zuweisen. Beide Methoden liefern ihr eigenes `Wizard`-Objekt über die this-Referenz zurück:

```java
class Wizard {

  String name = "";

  int age;

  Wizard name( String name ) { this.name = name; return this; }

  String name() { return name; }

  Wizard age( int item ) { this.age = item; return this; }

  int age() { return age; }

  String format() {

    return name + " ist " + age;

  }

}
```

Erzeugen wir einen `Wizard`, und kaskadieren wir einige Methoden:

```java
Wizard gundalf = new Wizard().name( "Gundalf" ).age( 60 );

System.out.println( gundalf.name() );         // Gundalf

System.out.println( gundalf.format() );       // Gundalf ist 60
```

Der Ausdruck new `Wizard`() liefert eine Referenz, die wir sofort für den Methodenaufruf nutzen. Da `name(String)` wiederum eine Objektreferenz vom Typ `Wizard` liefert, ist dahinter direkt .`age(int)` möglich. Die Verschachtelung von name(„Gunalf“).`age(60)` bewirkt, dass Name und Alter gesetzt werden und der jeweils nächste Methodenaufruf in der Kette über this eine Referenz auf dasselbe Objekt, aber mit verändertem internem Zustand bekommt.

Beispiele dieser Bauart sind in der Java-Bibliothek an einigen Stellen zu finden. Sie werden auch Builder genannt.

Hinweis: Die Methode `Wizard` `name(String)` ist mit ihrer Rückgabe praktisch, verstößt aber aus zwei Gründen gegen die JavaBeans-Konvention: Setter dürfen keine Rückgabe haben und müssen immer mit set beginnen. JavaBeans sind also nicht so dieser kompakten Builder-Schreibweise „kompatibel“.

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

## 1 Kommentare

**Patrick Cornelissen** · [13.11.2019 06:56](#comment-734382)

Das ist der Grund warum bei buildern da kein Set oder get davor steht sondern buildern.property(wert) zum Schreiben und ggf builder.property() zum Lesen, wobei es oft nur Methoden zum setzen gibt.

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

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

---

## Navigation

- Previous: [Besser dokumentierte NullPointerException in Java 14](https://www.tutego.de/blog/javainsel/2019/11/besser-dokumentierte-nullpointerexception-in-java-14.md)
- Next: [Snippet: int-Arrays kombinieren](https://www.tutego.de/blog/javainsel/2019/11/snippet-int-arrays-kombinieren.md)
