Java8 Top Tips

物联网

  甚至lambda表示的函数接口也能看到。

物联网

  设计Lambda表达式

  我认为lambda表达式有一点类似于泛型-我们会经常使用到泛型(例如,添加类型信息到List<>),但是比较罕见的是我们去设计一个具有泛型的方法或者一个类(比如像Person\)。同样的,我们经常会在使用诸如Streams API的时候传递lambda,但是却很少会创建一个需要传递lambda参数的方法。

  如果你发现自己处在这样一种境况,那么这里有一些提示。

  IntelliJ IDEA能够帮助你引入函数参数

  能够让你创建一个参数,这个参数是一个lambda而不是一个Object。这个特性的最好的一点就是它会智能建议一个匹配规格的已存在的函数接口。

物联网

  使用存在的函数接口

  随着开发者变得对Java8越来越熟悉,当使用Supplier和Consumer这些接口时,我们将会知道什么是我们所期望的,比如创建一个ErrorMessageCreator(例子)会是令人迷惑和浪费的。可以看一下 函数包 获取已经存在的那些函数接口。

[email protected]

  如果你确实需要创建自己的函数接口,那么用这个注解去标记它。看起来不需要这么做,但是Inteelij IDEA会在你的函数接口没有符合规范时提示你。当没有方法实现这个接口时,它会提示你。

物联网

  当方法太多时,也会提示你。

物联网

  当你把注解应用到一个类而不是接口时,也会发出提醒。

物联网

  Lambda表达式可以被用在任何有一个Single Abstract Method的接口中,但是它不能够应用到一个抽象类中。看起来没有啥逻辑,但它就是这样的。

  Streams

  Stream API 是Java8另一个最大的卖点,我认为我们到现在还是没有真的搞清楚这会如何改变我们的代码。这里有一些我自己发现很有用的东西。

  将点号对齐

  我个人比较喜欢对齐Stream操作。当然,你不需要非得这么做,但是我发现这样还是有很大好处的。

  一眼就看到所有的操作以及他们的顺序

  更容易调试(虽然Intellij IDEA提供了在一行中的lambda表达式中任意地方打断点的功能,但是将他们分隔成单独的行会更简单)

  可以很容易地注释掉一些操作以供测试

  很容易地插入peek()供调试或者测试

物联网

  这样做也会让代码看起来很舒服。当然,如果这么做,会增加代码的行数。

  你可以修改一下格式化设置使点号对齐。

物联网

  使用方法引用(Method References)

  你可能需要一会儿才能习惯这个奇怪的语法。但是,当我们能够正确地使用,它确实能够提高程序的可阅读性。考虑下面的代码:

  对比一下使用新引入的Objects类的辅助方法(helper methods):

  后面的代码能够更加明显地表明它想保存的值。IntelliJ IDEA会提示你何时一个lambda可以被替换成方法引用。

  当迭代一个集合,尽可能地使用Streams API

  使用新的集合方法:forEach。IDEA会提示你。