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

标签 java generics lambda java-8

<分区>

我有一个函数式界面

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

我可以为这个接口(interface)创建匿名类

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

如何为此创建 lambda 表达式。

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

最佳答案

方法范围内的泛型不能在 lambda 表达式中使用。它会抛出

Illegal lambda expression: Method modify of type MyInterface is generic

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

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

然后按如下方式使用它:

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

关于java - 如何为具有泛型方法的功能接口(interface)创建 lambda 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34368369/

相关文章:

c# - 带有两个可为空的日期列的 Linq OrderByDescending

java - Spring Web 服务不会读取 JSON

java - 结束行字符在 Java 正则表达式中不起作用

java - 以 extends 和 super 作为参数的无限通配符

generics - 如何在 Swift 泛型中说 "same class"

带有参数的 Java 8 流映射

java - 是否有用于 Spring 单元测试的内存/模拟 MySQL 包?

java - java中的正则表达式替换

c# - 接受 List<T> 的通用方法

c++ - 在这种情况下是否可以避免复制 lambda 仿函数?