[英]Lambda function without parameters - Cannot infer functional interface type
[英]How does a function from a functional interface perform a lambda function?
我正在嘗試理解函數式接口和 lambda 函數。而且我找不到函數式接口中的函數如何將它與 lambda 函數連接的解釋,也就是說,假設有這樣一個函數式接口
@FunctionalInterface
interface MyPredicate {
boolean test(Integer value);
}
現在我們將函數接口的變量分配給 lambda 函數:
public class Tester {
public static void main(String[] args) throws Exception {
MyPredicate myPredicate = x -> x > 0;
System.out.println(myPredicate.test(10)); //true
}
}
我很想知道為什么在調用myPredicate.test(10)
時會調用x > 0
。 也就是說,我是否正確理解當我們分配一個 lambda 函數時,編譯器以某種方式將函數接口中的函數與 lambda 函數的主體連接起來?只是繼承和覆蓋通常用於此,但編譯器在這里做了它或如何?我會很高興有解釋來理解這個問題
在 Java8 之前的術語中,lambda 表達式究竟是什么?
它是一個匿名類的實例,實現了當前上下文中所需的接口。
所以,要明白
MyPredicate myPredicate = x -> x > 0;
我們必須考慮一些不同的方面。
在這里,需要 lambda 表達式x -> x > 0
來給出與MyPredicate
兼容的結果。 因此,通過考慮使用該表達式的上下文,它等價於
MyPredicate myPredicate = new MyPredicate() {
boolean test(Integer whateverName) {
// some method body
}
};
現在,lambda 表達式填充了該方法的主體。 x ->
部分定義了參數名稱,所以現在我們有
MyPredicate myPredicate = new MyPredicate() {
boolean test(Integer x) {
// some method body
}
};
而x > 0
定義了主體和要返回的值:
MyPredicate myPredicate = new MyPredicate() {
boolean test(Integer x) {
return x > 0;
}
};
所以,當你調用myPredicate.test(10)
,沒有什么特別的。 myPredicate
的(匿名類)實例使用參數10
調用其test()
方法。 只是這個實例是使用 lambda 表達式語法創建的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.