Java Lambda類型推斷

2018-03-13 10:28 更新

Java Lambda類型推斷


lambda表達(dá)式表示函數(shù)接口的實(shí)例。

根據(jù)上下文,一個(gè)lambda表達(dá)式可以映射到不同的函數(shù)接口類型。

編譯器推斷l(xiāng)ambda表達(dá)式的類型。

例子

在下面的代碼中有兩個(gè)函數(shù)接口, Processor SecondProcessor。

Processor 有一個(gè)名為 getStringLength 的方法,它接受一個(gè)字符串作為參數(shù),并返回 int

SecondProcessor 有一個(gè)名為 noName 的方法,它接受一個(gè)字符串作為參數(shù),并返回一個(gè) int

從代碼中,我們可以看到,我們可以為它們分配兩個(gè)相同的lambda表達(dá)式。

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);
}

上面的代碼生成以下結(jié)果。



注意

Processor SecondProcessor 稱為目標(biāo)類型。

推斷l(xiāng)ambda表達(dá)式類型的過程稱為目標(biāo)類型。

編譯器使用以下規(guī)則來(lái)確定lambda表達(dá)式是否可分配給其目標(biāo)類型:

  • 它必須是一個(gè)函數(shù)接口。
  • lambda表達(dá)式的參數(shù)必須與函數(shù)接口中的抽象方法匹配。
  • lambda表達(dá)式的返回類型與函數(shù)接口中抽象方法的返回類型兼容。
  • 從lambda表達(dá)式拋出的檢查異常必須與函數(shù)接口中抽象方法的已聲明的throws子句兼容。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)