2015-12-19 26 views
6

Mam interfejs funkcjonalnyJak tworzyć wyrażenia lambda dla funkcjonalny interfejs mający metody rodzajowe

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

mogę utworzyć anonimową klasę dla tego interfejsu

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

Jak tworzyć wyrażenia lambda do tego.

MyInterface obj -> {return (T) obj;}; // ! ERROR as T is undefined 
+2

Sprawdź to pytanie: http://stackoverflow.com/q/22588518/1679863 –

+0

Factor Twój lambda do metody i zastosowanie odniesienie do metody. –

Odpowiedz

4

Generics w zakresie metody nie może być używane w wyrażeniach lambda. Będzie rzucać

nielegalnym wyrażenia lambda: Metoda modyfikacji typu MyInterface jest nazwą rodzajową

Musisz ustawić rodzajową w zakresie klasy.

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

następnie używać go w sposób następujący:

MyInterface obj2 = o -> {return o;}; 
Powiązane problemy