虽然咱们如今还用的JDK8html
之前在Java里写个长点的字符串是这个样子地:程序员
String sql = "select * from t_tianlangstudio_student" + " where age > 23 and age < 30" + " and sex = 1";123
若是字符串中再包含有双引号还须要转义,虽然有IDE帮忙,但仍是时常羡慕Scala、Rust里的文本块(多行字符串)的写法,那个酸爽,Java14里终于也能够这样写了:sql
public static String index = """ <html> <head> <title>tianlangstudio</title> </head> <body> <h1>一个不安分的程序员</h1> </body> </html> """;12345678910
是否是清爽多了?app
之前使用switch大概是这个样子地 :ide
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;}12345678910111213141516
如今能够这样写了:spa
public static int code(String s) { int result = switch(s) { case "a" , "b" -> 1; case "c" -> 2; default -> 100; } return result;}12345678
是否是清爽了不少?Java也开始区分表达式和(声明)语句了?关于表达式和语句能够参考Rust .
不过Rust里更多使用Match,Java14也对模式匹配有了些许支持,主要体如今instanceOf的使用上。scala
使用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"); } }12345
没看出哪里不同了?注意看String s
。能够自行脑补下要使用JDK8编写代码是什么样子的?调试
有没以为每次定义个(Java类)POJO,须要写大量的get,set方法还得重写equals方法特别麻烦,是否是也想要Scala中的样例类、Rust中的类元组struct那样简洁的类型定义方式?
Java14提供了record,能够这样定义类型了:code
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){}1234567
就问你清爽不清爽 ?
你是否也像我同样常常写链式调用的代码,就像这样:
String str = obj.fieldA.fieldAA.fieldAAA;1
这样写起来能够少费几根头发起变量名称,直到出现了空指针异常,异常信息只告诉你那一行出现了空指针,为了调试代码只好相似这样:
System.out.println(obj);System.out.println(obj.fieldA);System.out.println(obj.fieldA.fieldAA);String str = obj.fieldA.fieldAA.fieldAAA;1234
是否也曾像我同样从心底升起无数个草泥马. 多是咱们的呼唤起了做用,终于在Java14中会告诉你具体那个代码调用出了空指针。记得要在代码执行时设置:
-XX:+ShowCodeDetailsInExceptionMessages