2015-12-19 17 views
6

ho un'interfaccia funzionaleCome creare un'espressione lambda per l'interfaccia funzionale aver metodo generico

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

posso creare classe anonima per questa interfaccia

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

Come creare un'espressione lambda per questo.

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

Controllare questa domanda: http://stackoverflow.com/q/22588518/1679863 –

+0

Factor tua lambda in un metodo, e l'uso un riferimento al metodo. –

risposta

4

Generics al metodo di portata non possono essere usate in espressioni lambda. Si getterà

illegale espressione lambda: Metodo modifica di tipo MyInterface è generica

È necessario impostare il generico a perimetro di classe.

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

Quindi utilizzare come segue:

MyInterface obj2 = o -> {return o;}; 
Problemi correlati