【发布时间】:2019-03-17 09:33:03
【问题描述】:
我正在阅读 Herbert Schildt 的“Java: The Complete Reference”中关于 lambdas 的一章,其中有很多关于“lambda 目标类型”和“目标类型上下文”的引用:
一个功能接口定义了一个目标类型 拉姆达表达式。这里有一个关键点:只能使用 lambda 表达式 在指定其目标类型的上下文中。
或者:
如前所述,lambda 表达式不会自行执行。 相反,它形成了由 指定其目标类型的功能接口。结果,一个 lambda 只能在 目标类型 所在的上下文中指定表达式 定义。当 lambda 表达式为 分配给功能接口引用。其他目标类型上下文 包括变量初始化、返回语句和方法参数,以 举几个例子。
还有一个:
与 lambda 表达式关联的函数式接口可以是通用的。在 在这种情况下,lambda 表达式的目标类型部分由函数式接口指定的类型参数或参数确定 引用已声明。
谁能帮我理解 lambda 目标类型是什么意思?
例如,(int n) -> n % 2 == 0 中的 int 是 lambda 的目标类型?
或在:
interface MyInterface<T> {
T func();
}
MyInterface<String> myInt = () -> { return "123"; }
lambda 的目标类型是什么?是String 还是MyInterface<String>?那么这里的 lambda 上下文是什么?
我阅读了关于该主题的几篇关于 SO 的帖子,但仍然无法完全理解这些概念。
谢谢。
【问题讨论】:
-
我差不多十年前写了这个答案,显然在将 lambdas 引入 Java 之前:stackoverflow.com/a/4229898/2988 我刚刚添加了一段关于现代 Java 及其与 8 之前 Java 的比较的段落。在 pre-8 部分中,它包含对所有问题的解释,在 post-11 部分中,它解释了目标类型的 lambdas 如何解决其中一个问题。如果不了解为什么我们首先拥有它们,即它们应该解决什么问题,我认为你不会理解目标类型的 lambda。