Java Lambda类型推断

Java Lambda类型推断

lambda表达式表示函数接口的实例。

根据上下文,一个lambda表达式可以映射到不同的函数接口类型。

编译器推断lambda表达式的类型。

例子

在下面的代码中有两个函数接口, Processor SecondProcessor

Processor 有一个名为 getStringLength 的方法,它接受一个字符串作为参数,并返回 int

SecondProcessor 有一个名为 noName 的方法,它接受一个字符串作为参数,并返回一个 int

从代码中,我们可以看到,我们可以为它们分配两个相同的lambda表达式。

public class Main {
  public static void main(String[] argv) {
    Processor stringProcessor = (String str) -> str.length();
    SecondProcessor secondProcessor = (String str) -> str.length();
    //stringProcessor = secondProcessor; //compile error
    String name = "Java Lambda";
    int length = stringProcessor.getStringLength(name);
    System.out.println(length);

  }
}

@FunctionalInterface
interface Processor {
  int getStringLength(String str);
}

@FunctionalInterface
interface SecondProcessor {
  int noName(String str);
}

上面的代码生成以下结果。

注意

Processor SecondProcessor 称为目标类型。

推断lambda表达式类型的过程称为目标类型。

编译器使用以下规则来确定lambda表达式是否可分配给其目标类型:

  • 它必须是一个函数接口。
  • lambda表达式的参数必须与函数接口中的抽象方法匹配。
  • lambda表达式的返回类型与函数接口中抽象方法的返回类型兼容。
  • 从lambda表达式抛出的检查异常必须与函数接口中抽象方法的已声明的throws子句兼容。
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《Java Lambda类型推断》
文章链接:https://zhuji.vsping.com/294076.html
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。