2015-12-19 5 views
6

Ich habe eine funktionale SchnittstelleWie Lambda-Ausdruck für funktionale Schnittstelle mit generischer Methode

@FunctionalInterface 
interface MyInterface { 
    <T> T modify(Object); 
} 

ich erstellen kann anonyme Klasse für diese Schnittstelle

MyInterface obj = new MyInterface(){ 
    @Override 
    <T> T modify(Object obj){ 
     return (T) obj 
    } 
} 

Wie Lambda-Ausdruck für diesen erstellen erstellen.

+2

prüfen diese Frage: http://stackoverflow.com/q/22588518/1679863 –

+0

Factor Ihre Lambda in ein Verfahren und die Verwendung eine Methodenreferenz. –

Antwort

4

Generics im Methodenbereich können nicht in Lambda-Ausdrücken verwendet werden. Es wird

Illegal Lambda-Ausdruck werfen: Methode vom Typ MyInterface ändern ist generisch

Sie müssen die generischen auf Klassenbereich einzustellen.

@FunctionalInterface interface MyInterface<T> { T modify(Object obj); }

verwenden Sie es dann wie folgt:

MyInterface obj2 = o -> {return o;}; 
Verwandte Themen