[英]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.