从Java8到Java17(二)

这是我参与11月更文挑战的第8天,活动详情查看:2021最后一次更文挑战

上篇文章简单回顾了一下Java的版本历史,我们知道现在市场占有率最大的依然是Java8,如果想一步跨越到17可能存在一点困难,如刘姥姥进了大观园,新的东西太多导致目不暇接。可能也算不上太多,但也需要一步步去学习和掌握,首先从Java9开始,看看都有哪些变化。

Java9相对于8其实也是一个比较大的升级,尤其是引入了Java的模块化概念,但今天限于篇幅原因暂时还说不到这一块,先来看一下jdk的一些其他升级。

  1. 接口私有方法 从最开始写Java的时候就知道Java的interface只用来写方法的声明,所有的方法都是默认public abstract,具体的实现要实现类自己去实现。后来Java8引入了default方法还是static方法,从而接口中也可以写方法的实现了。现在Java9可以在接口中写私有方法了,私有方法不需要复写,别的实现类也无法调用。可能Java官方希望淡化接口这种类型,减少一些不需要额外实现的工具方法的重复实现。

  2. Flow API 这个东西的前身叫rxjava,或者叫reactive java。事件驱动已经不能简单的用来概括响应式编程了,为什么要增加这样的API呢,因为那段时间各个大厂纷纷发力异步编程,弄出很多种所谓的响应式框架,纷纷宣称自己性能好。后来被某个开源联盟联合起来一起出了一个响应式的规范:

  • Subscriber:订阅者
  • Publisher:生产者
  • Subscription:订阅关系
  • Processor:订阅者和生产者之间的N个处理步骤

响应式编程并不能提升多少性能,而是使程序更加稳定和获得更好的扩展性。

  1. 集合类的工厂方法 Java经常被吐槽啰嗦,也确实啰嗦,创建一个小的集合要几步:
Set<String> set = new HashSet<>();
set.add("a");
set.add("b");
set.add("c");
复制代码

然后再去使用这个set,四行代码,尤其是这个逐个add,不像一个现代语言。所以现在可以用简单的写法:

Set<String> set = Set.of("a", "b", "c");
复制代码

包括List,Set,Map都可以使用of来直接创建集合。

  1. Stream API的增强 增加takeWhiledropWhileofNullable, iterate的API,越来越像一些函数式语言了。用法举例如下:
List<Integer> list = Stream.of(2,2,3,4,5,6,7,8,9,10)  
      .takeWhile(i -> (i % 2 == 0)).collect(Collectors.toList());
复制代码

猜你喜欢

转载自juejin.im/post/7028219433109684232
今日推荐