From 01409c19bbd0493922dceccee35911ffeaa064c7 Mon Sep 17 00:00:00 2001 From: LingCoder Date: Fri, 19 Apr 2019 23:52:39 +0800 Subject: [PATCH] =?UTF-8?q?[ISSUE=20#24]=E6=A0=A1=E8=AE=A2=E7=AC=AC13?= =?UTF-8?q?=E7=AB=A0=E5=87=BD=E6=95=B0=E5=BC=8F=E7=BC=96=E7=A8=8B-?= =?UTF-8?q?=E5=87=BD=E6=95=B0=E5=BC=8F=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/book/13-Functional-Programming.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/book/13-Functional-Programming.md b/docs/book/13-Functional-Programming.md index 7ae4520..1ef6496 100644 --- a/docs/book/13-Functional-Programming.md +++ b/docs/book/13-Functional-Programming.md @@ -468,7 +468,7 @@ X::f() 要解决这个问题,我们需要一个 `X` 对象,所以我们的接口实际上需要一个额外的参数,就像你在 **TransformX** 中看到的那样。 如果将 `X :: f` 分配给 **TransformX**,Java 很高兴。 我们现在必须进行第二次心理调整 - 使用未绑定的引用时,函数方法的签名(接口中的单个方法)不再与方法引用的签名完全匹配。 有一个很好的理由说服你,那就是你需要一个对象来调用方法。 -**[2]** 的结果有点像脑筋急转弯。 我接受未绑定的引用并对其调用 `transform()`,将其传递给X,并以某种方式导致对 `x.f()`的调用。 Java知道它必须采用第一个参数,实际上是这个,并在其上调用方法。 +**[2]** 的结果有点像脑筋急转弯。 我接受未绑定的引用并对其调用 `transform()`,将其传递给X,并以某种方式导致对 `x.f()` 的调用。 Java知道它必须采用第一个参数,实际上是这个,并在其上调用方法。 ```java // functional/MultiUnbound.java @@ -553,7 +553,7 @@ public class CtorReference { 注意我们如何对 **[1]**,**[2]** 和 **[3]** 中的每一个使用 `Dog :: new`。 所有三个构造函数只有一个名称:`:: new`。 但是构造函数引用在每种情况下都分配给不同的接口,并且编译器可以知道从哪个构造函数引用中进行检测。 -编译器可以看到调用函数方法( 在本例中为make())意味着调用构造函数。 +编译器可以看到调用函数方法( 在本例中为 `make()`)意味着调用构造函数。 ## 函数式接口 @@ -565,9 +565,9 @@ public class CtorReference { x -> x.toString() ``` -我们看到返回类型必须是String,但x是什么类型? +我们看到返回类型必须是 **String**,但 `x` 是什么类型? -因为 Lambda 表达式包含一种类型推断形式(编译器会对类型进行描述,而不是要求程序员显式),编译器必须能够以某种方式推导出 x 的类型。 +因为 Lambda 表达式包含一种类型推断形式(编译器会对类型进行描述,而不是要求程序员显式),编译器必须能够以某种方式推导出 `x` 的类型。 这是第二个例子: @@ -577,7 +577,7 @@ x -> x.toString() 现在 `x` 和 `y` 可以是支持 `+` 运算符的任何类型,包括两个不同的数字类型或一个 **String** 以及一些将自动转换为 **String** 的类型(这包括大多数类型)。 但是,当分配此 Lambda 表达式时,编译器必须确定 `x` 和 `y` 的确切类型以生成正确的代码。 -同样的问题适用于方法引用。 假设你要传递 System.out :: println 到你正在编写的方法 ,你为方法的参数给出了什么类型? +同样的问题适用于方法引用。 假设你要传递 `System.out :: println` 到你正在编写的方法 ,你为方法的参数给出了什么类型? 为了解决这个问题,Java 8 引入了 `java.util.function`,它包含一组接口,这些接口是 Lambda 表达式和方法引用的目标类型。 每个接口只包含一个抽象方法,称为函数式方法。