亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

用函數替換函數接口

用函數替換函數接口

胡說叔叔 2022-05-25 16:09:50
我對這段代碼有點困惑。為什么不編譯?@FunctionalInterfacepublic interface Inter {  BigDecimal method (BigDecimal param);}public class Main {  public static void main {    Function<BigDecimal, BigDecimal> func = param -> BigDecimal.ZERO;    Inter i1 = param -> BigDecimal.ZERO; // compile    Inter i2 = func; // not compile  }}
查看完整描述

3 回答

?
慕姐8265434

TA貢獻1813條經驗 獲得超2個贊

查看包 java.util.function 的描述。

函數式接口為 lambda 表達式和方法引用提供目標類型。

這并不意味著功能接口是任意具體類的變量的目標類型(例如Function<BigDecimal, BigDecimal>在您的情況下)。

要在需要特定功能接口()的上下文中使用Function<>(在您的情況下,在名為 的變量中),您可以簡單地將其設為 lambda 或方法引用:funcInter

Inter i2 = p -> func.apply(p);  // compiles

或者

Inter i2 = func::apply;


查看完整回答
反對 回復 2022-05-25
?
楊__羊羊

TA貢獻1943條經驗 獲得超7個贊

我可以在這里看到 2 個功能接口(SAM),第一個是 Inter,第二個是由 java 提供的 FunctionalInterface,它表示一個接受一個參數并產生結果的函數。


查看Inter i2 = func;line ,您在這里嘗試做的是將一個功能接口分配給另一個功能接口,這在這里沒有任何意義。


我已經修改了您的代碼并引入了一個新的功能界面,希望這有助于并消除您的疑問。


@FunctionalInterface

public interface Inter {

    BigDecimal method (BigDecimal param);

}


public static void main(String args[])

{

    Function<BigDecimal, BigDecimal> func = param -> BigDecimal.ZERO;


    Inter i1 = param -> BigDecimal.ZERO; // compile


    //creating new functional interface which returns Inter lambda body.

    Supplier<Inter> interSuppFuncInter = () -> { return param -> BigDecimal.ZERO; };


    Inter i2 = interSuppFuncInter.get(); // now compile's

    System.out.println(i2.method(BigDecimal.ZERO)); // invoke i2 lambda by calling its  method and passing the param

}


查看完整回答
反對 回復 2022-05-25
?
Helenr

TA貢獻1780條經驗 獲得超4個贊

func是一個Function<BigDecimal, BigDecimal>,它不是 的子接口Inter。因此,它不能分配給Inter變量。

兩者InterFunction<BigDecimal, BigDecimal>都是具有相同簽名的方法的功能接口這一事實并不重要,因為它們不相關。


查看完整回答
反對 回復 2022-05-25
  • 3 回答
  • 0 關注
  • 93 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號