进击的 Java(二)
上篇文章简单回顾了一下 Java 的版本历史,我们知道现在市场占有率最大的依然是 Java8,如果想一步跨越到 17 可能存在一点困难,如刘姥姥进了大观园,新的东西太多导致目不暇接。可能也算不上太多,但也需要一步步去学习和掌握,首先从 Java9 开始,看看都有哪些变化。
Java9 相对于 8 其实也是一个比较大的升级,尤其是引入了 Java 的模块化概念,但今天限于篇幅原因暂时还说不到这一块,先来看一下 jdk 的一些其他升级。
接口私有方法
从最开始写 Java 的时候就知道 Java 的 interface 只用来写方法的声明,所有的方法都是默认 public abstract,具体的实现要实现类自己去实现。后来 Java8 引入了 default 方法还是 static 方法,从而接口中也可以写方法的实现了。现在 Java9 可以在接口中写私有方法了,私有方法不需要复写,别的实现类也无法调用。可能 Java 官方希望淡化接口这种类型,减少一些不需要额外实现的工具方法的重复实现。
Flow API
这个东西的前身叫 rxjava,或者叫 reactive java。事件驱动已经不能简单的用来概括响应式编程了,为什么要增加这样的 API 呢,因为那段时间各个大厂纷纷发力异步编程,弄出很多种所谓的响应式框架,纷纷宣称自己性能好。后来被某个开源联盟联合起来一起出了一个响应式的规范:
Subscriber:订阅者
Publisher:生产者
Subscription:订阅关系
Processor:订阅者和生产者之间的 N 个处理步骤
响应式编程并不能提升多少性能,而是使程序更加稳定和获得更好的扩展性。
集合类的工厂方法
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 来直接创建集合。
Stream API 的增强
增加takeWhile
, dropWhile
, ofNullable
, iterate
的 API,越来越像一些函数式语言了。用法举例如下:
评论