gpt4 book ai didi

methods - Java 8 中方法引用和 lambda 的类型

转载 作者:行者123 更新时间:2023-12-04 22:19:21 26 4
gpt4 key购买 nike

我想知道为什么方法引用和 lambda 不被识别为函数。为什么我需要写作

Function<Integer, Integer> fun1 = i -> i+2;
Function<Integer, Integer> fun2 = i -> i*i;
fun1.compose(fun2).apply(4);

代替
((Integer i) -> i*2).compose((Integer i) -> i+2).apply(4)

最佳答案

Lambda 表达式没有内在类型;以下是一个错误:

Object lambda = x -> x;

Lambda 表达式是 poly 表达式,它们的类型取决于其上下文。特别是,一个 lambda 表达式从它的目标类型派生它的类型,它必须是一个函数接口(interface)——一个具有单个(非 Object)抽象方法的接口(interface)。同一个 lambda 表达式可能有多种类型,具体取决于它的目标类型:
Predicate<String> isEmpty = s -> s.isEmpty();
Function<String, Boolean> isEmpty = s -> s.isEmpty();

接口(interface) Function不是语言的一部分,也没有任何神奇的属性;它只是一个普通的功能接口(interface),就像 RunnablePredicateComparable .编译器没有理由猜测您的意思是 lambda 以 Function 为目标。而不是其他类型。

此外,您无需成为 lambda 即可实现 Function ;您可以是命名类或匿名类。 Lambdas(和方法 refs)是一种语法紧凑的方法,用于指定功能接口(interface)的实例。

关于methods - Java 8 中方法引用和 lambda 的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39861631/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com