---
title: 'Rückgabetypen und Typ-Inferenz bei Lambda-Deklarationen'
url: 'https://www.tutego.de/blog/javainsel/2013/02/rckgabetypen-und-typ-inferenz-bei-lambda-deklarationen'
markdown: 'https://www.tutego.de/blog/javainsel/2013/02/rckgabetypen-und-typ-inferenz-bei-lambda-deklarationen.md'
date: '2013-02-16'
description: 'Typinferenz spielt bei Lambda-Ausdrücken eine große Rolle – das gilt insbesondere für die Rückgabetypen, die überhaupt nicht in der Deklaration auftauchen. Bei unserem Beispiel Comparator<String> c = (String s1, String s2) -> { return s1.trim().compareTo( s2.trim() ); }; ist String als Par…'
taxonomy:
  category:
    - Insel
    - 'Java 8'
---

# Rückgabetypen und Typ-Inferenz bei Lambda-Deklarationen

![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/)

## Rückgabetypen und Typ-Inferenz bei Lambda-Deklarationen

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

Typinferenz spielt bei Lambda-Ausdrücken eine große Rolle – das gilt insbesondere für die Rückgabetypen, die überhaupt nicht in der Deklaration auftauchen. Bei unserem Beispiel

```java
Comparator<String> c = (String s1, String s2) -> { return s1.trim().compareTo( s2.trim() ); };
```

ist `String` als Parametertyp der `Comparator`-Methode ausdrücklich gegeben, aber int taucht nicht auf.

Mitunter muss dem Compiler etwas geholfen werden: Nehmen wir die funktionale Schnittstelle `Supplier`<T>, die eine Methode T `get()` deklariert, für ein Beispiel. Die Zuweisung

```
Supplier<Long> two = () -> 2; // Compilerfehler
```

ist nicht korrekt und führt zum Compilerfehler „incompatible types: bad return type in lambda expression“. 2 ist ein Literal vom Typ int und der Compiler kann es nicht an Long anpassen. Wir müssen schreiben:

```java
Supplier<Long> two = () -> 2L;
```

oder

```java
Supplier<Long> two = () -> (long) 2;
```

Bei Lambda-Ausdrücken gelten keine wirklich neuen Regeln im Vergleich zu Methodenrückgaben, denn auch

```java
public static Long two() { return 2; } // Compilerfehler
```

wird vom Compiler angemeckert. Doch weil Generics bei funktionalen Schnittstellen viel häufiger sind, treten diese Besonderheiten öfters zu Tage auf als bei Methodendeklarationen.

Kategorien: [Insel](https://www.tutego.de/blog/javainsel/category/insel/), [Java 8](https://www.tutego.de/blog/javainsel/category/java-8/)

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

---

## Navigation

- Previous: [Rekursive Lambda-Ausdrücke](https://www.tutego.de/blog/javainsel/2013/02/rekursive-lambda-ausdrcke.md)
- Next: [GAEJ unterstützt nun auch Java 7](https://www.tutego.de/blog/javainsel/2013/02/gaej-untersttzt-nun-auch-java-7.md)
