簡體   English   中英

功能接口,功能方法和lamda?

[英]Functional Interface , Functional Method and lamda?

我實現了功能接口,使用 lambda function 中的功能方法。 一切正常,除了我得到這個繼承的抽象方法(在我的例子中是函數方法)必須實現的錯誤。 在這里我很困惑。 我使用了 lambda function 來實現這個功能方法,為什么我要再次實現這個方法。 函數式方法的實現如何正確完成? 我的代碼:

interface MyFunction {
  int getValue(int num); }

class Factorial implements MyFunction {
  public static void main (String [] args) {
        MyFunction myFactorialFunc = (num) -> {
            int fact = 1;
            for(int i = 1; i <= num; i++){
                fact = i * fact;
            }
            return fact;
        };
        System.out.println(myFactorialFunc.getValue(7));
}
}

謝謝你的幫助。 :)

我想您一定從某個地方聽說過“您可以使用 lambda 表達式實現單方法接口”,然后通過編寫此代碼進行嘗試。 一直誤解那是什么意思。

Lambda 表達式實際上不允許您編寫class MyClass implements SomeInterface而不聲明所需的方法。 就編譯器而言, Factorial只聲明了一個main方法,沒有getValue方法,所以它沒有實現MyFunction接口。

您的代碼確實演示了“您可以使用 lambda 表達式實現單方法接口”。 main方法中,您將 lambda 表達式分配給MyFunction類型的變量:

MyFunction myFactorialFunc = (num) -> {
    int fact = 1;
    for(int i = 1; i <= num; i++){
        fact = i * fact;
    }
    return fact;
};

通常,您必須將MyFunction的實現放在=的右側,不是嗎? 但是現在,你可以只使用 lambda 表達式,這是因為 lambda 表達式的簽名與接口中單個方法的簽名匹配,所以編譯器會“是的,沒關系。我將其用作實現那個方法”。

您定義了Factorial class 來實現MyFunction ,但它沒有實現該接口的方法( int getValue(int num); )。

使用 lambda 表達式在您的main中實現的MyFunction實例不會為您的Factorial class 實現該接口。

只需將其更改為:

class Factorial {
    public static void main (String [] args) {
        MyFunction myFactorialFunc = (num) -> {
            int fact = 1;
            for(int i = 1; i <= num; i++){
                fact = i * fact;
            }
            return fact;
        };
        System.out.println(myFactorialFunc.getValue(7));
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM