Java14 不得不知的 5 个新功能
虽然我们现在还用的 JDK8
文本块
以前在 Java 里写个长点的字符串是这个样子地:
- String sql = "select * from t_tianlangstudio_student"
- + "where age> 23 and age <30"
- + "and sex = 1";
如果字符串中再包含有双引号还需要转义, 虽然有 IDE 帮忙, 但还是时常羡慕 Scala https://www.scala-lang.org/ ,Rust https://edu.51cto.com/sd/eed8c 里的文本块 (多行字符串) 的写法, 那个酸爽, Java14 里终于也可以这样写了:
public static String index = """
<html>
<head>
<title>tianlangstudio</title>
</head>
<body>
<h1> 一个不安分的程序员 </h1>
</body>
</html>
""";
是不是清爽多了?
Switch 表达式
以前使用 switch 大概是这个样子地 :
- public static int codeDemo(int i) {
- int result;
- switch(i) {
- case 1:
- case 2:
- result = 18;
- break;
- case 3:
- result = 28;
- break;
- default:
- result = 100;
- break;
- }
- return result;
- }
现在可以这样写了:
- public static int code(String s) {
- int result = switch(s) {
- case "a" , "b" -> 1;
- case "c" -> 2;
- default -> 100;
- }
- return result;
- }
是不是清爽了很多? Java 也开始区分表达式和 (声明) 语句了? 关于表达式和语句可以参考 Rust https://edu.51cto.com/sd/eed8c .
不过 Rust 里更多使用 Match,Java14 也对模式匹配有了些许支持, 主要体现在 instanceOf 的使用上.
instanceOf
使用 instanceOf 判断一个变量是否属于某个类型的实例的同时, 还能声明一个变量作为当前类型的实例进行更多的判断. 就像这个样子:
- public static void demo(Object obj) {
- if (obj instanceof String s && s.length()> 4) {
- System.out.println("it is a String and length greater than 4");
- }
- }
没看出哪里不一样了? 注意看 String s . 可以自行脑补下要使用 JDK8 编写代码是什么样子的?
record
有没觉得每次定义个 (Java 类)POJO, 需要写大量的 get,set 方法还得重写 equals 方法特别麻烦, 是不是也想要 Scala 中的样例类, Rust 中的类元组 struct 那样简洁的类型定义方式?
Java14 提供了 record, 可以这样定义类型了:
- public static void main(String[] args) {
- Person person1 = new Person("Tianlang", 23);
- Person person2 = new Person("Tianlang", 23);
- System.out.println(person1.equals(person2)); // true
- }
- public static record Person(String name, int age){}
就问你清爽不清爽 ?
更有用的空指针异常提示信息
你是否也像我一样经常写链式调用的代码, 就像这样:
String str = obj.fieldA.fieldAA.fieldAAA;
这样写起来可以少费几根头发起变量名称, 直到出现了空指针异常, 异常信息只告诉你那一行出现了空指针, 为了调试代码只好类似这样:
- System.out.println(obj);
- System.out.println(obj.fieldA);
- System.out.println(obj.fieldA.fieldAA);
- String str = obj.fieldA.fieldAA.fieldAAA;
是否也曾像我一样从心底升起无数个草泥马. 可能是我们的呼唤起了作用, 终于在 Java14 中会告诉你具体那个代码调用出了空指针. 记得要在代码执行时设置:
-XX:+ShowCodeDetailsInExceptionMessages
如果你像我一样不想升级 JDK 又想尝试新的写法也可以考虑新语言如: Scala https://www.scala-lang.org/ 或 Rust https://edu.51cto.com/sd/eed8c 语言.
来源: http://www.bubuko.com/infodetail-3634083.html