如何为具有泛型方法的功能接口创建lambda表达式

时间:2015-12-19 07:20:17

标签: java generics lambda java-8

我有一个功能界面

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

我可以为这个界面创建一个匿名类

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

如何为此创建lambda表达式。

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

1 个答案:

答案 0 :(得分:4)

方法范围内的泛型不能用于lambda表达式。它将抛出

  

非法lambda表达式:MyInterface类型的方法修改是通用的

您需要在类范围内设置泛型。

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

然后使用如下:

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