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>
都是具有相同签名的方法的功能接口这一事实并不重要,因为它们不相关。
添加回答
举报