Java 中的 lambda 目标类型和目标类型上下文是什么意思?

2024-05-01

我正在阅读 Herbert Schildt 的《Java:完整参考》中关于 lambda 的一章,其中有很多对“lambda 目标类型”和“目标类型上下文”的引用:

函数式接口定义了目标类型的一个 拉姆达表达式。这里有一个关键点:只能使用 lambda 表达式 在其目标类型已指定。

Or:

如前所述,lambda 表达式不会单独执行。 相反,它形成了由 指定其功能的接口目标类型。结果,一个 lambda 表达式只能在以下上下文中指定:目标类型是 定义的。当 lambda 表达式被创建时,就会创建这些上下文之一 分配给功能接口参考。其他目标类型上下文包括变量初始化、返回语句和方法参数,以 举几个例子。

完后还有:

与 lambda 表达式关联的函数接口可以是通用的。在 本案中,目标类型lambda 表达式的部分取决于函数接口时指定的类型参数或参数 声明引用。

有人可以帮我理解 lambda 目标类型的含义吗?

例如,在(int n) -> n % 2 == 0 is intlambda 的目标类型?

Or in:

interface MyInterface<T> {
    T func();
}

MyInterface<String> myInt = () -> { return "123"; }

lambda 的目标类型是什么?是吗String or MyInterface<String>?这里 lambda 的上下文是什么?

我读了几篇关于该主题的文章,但仍然无法完全理解这些概念。

Thanks.


“目标”的定义之一(取自here https://dictionary.cambridge.org/dictionary/english/target) is:

您想要实现的结果或情况。

你可以说 lambda 表达式想要实现的结果是实现一些函数式接口。因此,该函数式接口可以被视为该 lambda 表达式的目标,并且该函数式接口的类型就是目标类型。

因此,目标类型是 lambda 表达式实现的函数接口的类型。

可以根据以下内容推断目标类型context其中使用了 lambda 表达式:

  1. 如果将 lambda 表达式分配给函数接口引用变量,则该变量的类型就是目标类型。
  2. 如果某个方法返回 lambda 表达式,则该方法的返回类型就是目标类型。
  3. 如果 lambda 表达式作为参数传递给方法,则该方法所需的相应参数的类型就是目标类型。

In

(int n) -> n % 2 == 0

目标类型未知。如果将此表达式分配给某个功能接口引用,则该引用将是目标类型。

In

MyInterface<String> myInt = () -> { return "123"; }

目标类型是MyInterface<String>.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 中的 lambda 目标类型和目标类型上下文是什么意思? 的相关文章

随机推荐