mirror of
https://github.com/sjsdfg/effective-java-3rd-chinese.git
synced 2024-12-26 12:50:29 +08:00
优化了第42条的翻译内容 (#47)
This commit is contained in:
parent
be0ab9235c
commit
aff9ad2da2
@ -2,7 +2,7 @@
|
||||
|
||||
在 Java 8 中,添加了函数式接口,`lambda` 表达式和方法引用,以便更容易地创建函数对象。 Stream API 随着其他语言的修改一同被添加进来,为处理数据元素序列提供类库支持。 在本章中,我们将讨论如何充分利用这些功能。
|
||||
|
||||
以往,使用单一抽象方法的接口(或者很少使用抽象类)被用作函数类型。 它们的实例(称为函数对象)表示函数(functions)或行动(actions)。 自从 JDK 1.1 于 1997 年发布以来,创建函数对象的主要手段就是匿名类(详见第 24 条)。 下面是一段代码片段,按照字符串长度顺序对列表进行排序,使用匿名类创建排序的比较方法(强制排序顺序):
|
||||
以往,使用单一抽象方法的接口(或者很少使用的抽象类)被用作函数类型。 它们的实例(称为函数对象)表示函数(functions)或行动(actions)。 自从 JDK 1.1 于 1997 年发布以来,创建函数对象的主要手段就是匿名类(详见第 24 条)。 下面是一段代码片段,按照字符串长度顺序对列表进行排序,使用匿名类创建排序的比较方法(强制排序顺序):
|
||||
|
||||
```java
|
||||
// Anonymous class instance as a function object - obsolete!
|
||||
@ -12,9 +12,9 @@ Collections.sort(words, new Comparator<String>() {
|
||||
}
|
||||
});
|
||||
```
|
||||
匿名类适用于需要函数对象的经典面向对象设计模式,特别是策略模式[Gamma95]。 比较器接口表示排序的抽象策略; 上面的匿名类是排序字符串的具体策略。 然而,匿名类的冗长,使得 Java 中的函数式编程成为一种吸引人的前景。
|
||||
匿名类适用于需要函数对象的经典面向对象设计模式,特别是策略模式[Gamma95]。 比较器接口表示排序的抽象策略; 上面的匿名类是排序字符串的具体策略。 然而,匿名类的冗长,使得 Java 中的函数式编程成为一种不吸引人的设想。
|
||||
|
||||
在 Java 8 中,语言形式化了这样的概念,即使用单个抽象方法的接口是特别的,应该得到特别的对待。 这些接口现在称为函数式接口,并且该语言允许你使用 **lambda** 表达式或简称 **lambda** 来创建这些接口的实例。 **Lambdas** 在功能上与匿名类相似,但更为简洁。 下面的代码使用 **lambdas** 替换上面的匿名类。 样板不见了,行为清晰明了:
|
||||
在 Java 8 中,语言形式化了这样的概念,即使用单个抽象方法的接口是特别的,应该得到特别的对待。 这些接口现在称为函数式接口,并且该语言允许你使用 **lambda** 表达式或简称 **lambdas** 来创建这些接口的实例。 **Lambdas** 在功能上与匿名类相似,但更为简洁。 下面的代码使用 **lambdas** 替换上面的匿名类。 样板不见了,行为清晰明了:
|
||||
|
||||
```java
|
||||
// Lambda expression as function object (replaces anonymous class)
|
||||
|
Loading…
Reference in New Issue
Block a user