Java Lambda类型推断

2018-03-13 10:28 更新

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子句兼容。


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号