从Java8到Java17(九)

528 阅读2分钟

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

前几期讲的特性已经几乎涵盖了日常的开发了,但Java的野心不止于此,Java还想继续提升性能,可能绝大多数开发者不会用到,能用到的也不会选择Java,但这不妨碍Java做技术储备。有时候我觉得17只是把前几期的版本做了一下bug修复和完善,然后改一下版本号。下面简单介绍一下16之后的版本都有什么。

向量API

Java很早之前就有Vector这样的数据结构,但这次发布的vector要高端的多。真正实现了Java的高性能向量计算。什么是向量呢?向量是一个有大小和方向的量,可以表示二维或者三维的空间,让空间的运算得到抽象并映射成计算公式。Java这次就是要给AI开发者一个高性能的API,虽然还是预览的版本。稍微深究一下,传统的CPU指令集是SISD(单指令单数据),Vector API会讲计算的代码转换成SIMD(单指令多数据),最大程度的压榨CPU以获取较高的性能。

switch模式匹配

之前提到过instanceof的模式匹配,提到过switch的->表达式。现在将两者结合起来,switch的同时进行类型的匹配,之前提到的sealed class也是在为这个新特性打基础。现在switch可以这么写:

switch (o) {
case null -> System.out.println("null");
case String s -> System.out.println("String");
case Point p -> System.out.println(p.toString());
case int[] ia -> System.out.println("Array length" + ia.length);
default -> System.out.println("Something else");
}

可以注意到是支持null判断的,这样就不用在外面单独写一层if判断空了。同时,case的条件也可以是多个:

 switch (o) {
        case null, String s -> System.out.println("String: " + s);
    }

做运算也没问题:

switch (s) {
        case Triangle t && (t.calculateArea() > 100) ->
            System.out.println("Large triangle");
        default ->
            System.out.println("A shape, possibly a small triangle");
    }

可以看出Java真的在努力改变自己曾经啰嗦的印象,掌握了开发者的喜好密码。