Java10新特性(2018年3月)
1、局部变量的自动类型推断(var):
Java10带来了一个新的语法:var,它可以自动推断 局部变量的类型,以后再也不用写类型了,也不用靠Lombok的var注解增强了,var message = "Hello, Java 10";不过这个编译之后还是有类型的,使用时要优先考虑一下可维护性的问题。
Java11新特性(2018年9月)
1、lambda中的自动类型推断(var)
Java11中对lambda语法也支持了var这个自动类型推断的变量,通过var变量还可以增加额外的注解:
List<String> languages = Arrays.asList("Java", "Groovy");
String language = sampleList.stream()
.map((@Nonnull var x) -> x.toUpperCase())
.collect(Collectors.joining(", "));
assertThat(language).isEqualTo("Java, Groovy");
2、javac+java命令一体化
之前编译一个Java文件时需要先编译(javac),后执行(Java),现在可以如下直接操作:
$ java HelloWorld.java
Hello Java 11!
3、Java Flight Recorder登录了OpenJDK
Java Flight Recorder是一个非常好用的调试诊断工具,不过之前是在Oracle JDK中,现在Java11也开源了,OpenJDK现在也可以使用了。
Java12新特性(2019年3月)
1、更简洁的switch语法
在之前的Java版本中是如下所示的:
DayOfWeek dayOfWeek = LocalDate.now().getDayOfWeek();
String typeOfDay = "";
switch (dayOfWeek) {
case MONDAY:
case TUESDAY:
case WEDNESDAY:
case THURSDAY:
case FRIDAY:
typeOfDay = "Working Day";
break;
case SATURDAY:
case SUNDAY:
typeOfDay = "Day Off";
}
现在可以这样使用了:
typeOfDay = switch (dayOfWeek) {
case MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY -> "Working Day";
case SATURDAY, SUNDAY -> "Day Off";
};
2、instanceof + 类型转换一步到位:
在之前的版本处理动态类型碰上需要强转的时候,需要先instanceof判断一下,然后在转换:
Object obj = "Hello Java 12!";
if (obj instanceof String) {
String s = (String) obj;
int length = s.length();
}
现在instanceof支持直接类型转换了,如下:
Object obj = "Hello Java 12!";
if (obj instanceof String str) {
int length = str.length();
}
本文概述了Java从10到12的主要新特性,包括局部变量自动类型推断(var),lambda表达式的var语法增强,javac/java命令集成,简洁的switch语法,以及instanceof的改进。这些更新旨在提高代码效率和可读性。

被折叠的 条评论
为什么被折叠?



