3 回答

TA貢獻1813條經驗 獲得超2個贊
函數式接口為 lambda 表達式和方法引用提供目標類型。
這并不意味著功能接口是任意具體類的變量的目標類型(例如Function<BigDecimal, BigDecimal>
在您的情況下)。
要在需要特定功能接口()的上下文中使用Function<>
(在您的情況下,在名為 的變量中),您可以簡單地將其設為 lambda 或方法引用:func
Inter
Inter i2 = p -> func.apply(p); // compiles
或者
Inter i2 = func::apply;

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
}

TA貢獻1780條經驗 獲得超4個贊
func
是一個Function<BigDecimal, BigDecimal>
,它不是 的子接口Inter
。因此,它不能分配給Inter
變量。
兩者Inter
和Function<BigDecimal, BigDecimal>
都是具有相同簽名的方法的功能接口這一事實并不重要,因為它們不相關。
添加回答
舉報