02 2019 档案
摘要:在 Java 8 中添加了 Stream API,以简化顺序或并行执行批量操作的任务。该 API 提供了两个关键的抽象:流(Stream),表示有限或无限的数据元素序列,以及流管道(stream pipeline),表示对这些元素的多步计算。Stream 中的元素可以来自任何地方。常见的源包括集合,
阅读全文
摘要:现在 Java 已经有了 lambda 表达式,编写 API 的最佳实践已经发生了很大的变化。例如模板方法模式——其中一个子类重写原始方法以专门化其父类的行为——变得没有那么吸引人。现代替代的选择是提供一个静态工厂或构造方法来接受函数对象以达到相同的效果。通常地说,可以编写更多以函数对象为参数的构造
阅读全文
摘要:lambda 优于匿名类的主要优点是它更简洁。Java 提供了一种生成函数对象的方法,比 lambda 还要简洁,那就是方法引用( method references)。下面是一段代码片段,它维护一个从任意键到 的 map。如果将该值解释为键的实例个数,则该程序是一个多重集合的实现。该代码的功能是,
阅读全文
摘要:以往,具有单一抽象方法的接口(或者很少使用的抽象类)被用作函数类型。它们的实例(称为函数对象)表示函数(functions)或行动(actions)。自从 JDK 1.1 于 1997 年发布以来,创建函数对象的主要手段就是匿名类(条款 24)。下面是一段代码片段,按照字符串长度顺序对列表进行排序,
阅读全文
摘要:虽然 Java 编译器允许在单个源文件中定义多个顶级类,但这样做没有任何好处,并且存在重大风险。风险源于在源文件中定义多个顶级类可能会为一个类提供多个定义。使用哪个定义会依赖于源文件传递给编译器的顺序。 为了具体说明,请考虑下面的源文件,其中只包含一个引用其他两个顶级类( 和 类)的成员的 类: 现
阅读全文
摘要:嵌套类(nested class)是在另一个类中定义的类。嵌套类应该只存在于其外部类(enclosing class)中。如果一个嵌套类在其他一些情况下是有用的,那么它应该是一个顶级类。有四种嵌套类:静态成员类,非静态成员类,匿名类和局部类。除了第一种以外,剩下的三种都被称为内部类(inner cl
阅读全文