雖然咱們如今還用的JDK8 html
之前在Java裏寫個長點的字符串是這個樣子地:java
String sql = "select * from t_tianlangstudio_student" + " where age > 23 and age < 30" + " and sex = 1";
若是字符串中再包含有雙引號還須要轉義,雖然有IDE幫忙,但仍是時常羨慕Scala、Rust裏的文本塊(多行字符串)的寫法,那個酸爽,Java14裏終於也能夠這樣寫了: 程序員
public static String index = """ <html> <head> <title>tianlangstudio</title> </head> <body> <h1>一個不安分的程序員</h1> </body> </html> """;
是否是清爽多了?sql
之前使用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; }
如今能夠這樣寫了: scala
public static int code(String s) { int result = switch(s) { case "a" , "b" -> 1; case "c" -> 2; default -> 100; } return result; }
是否是清爽了不少?Java也開始區分表達式和(聲明)語句了?關於表達式和語句能夠參考Rust .
不過Rust裏更多使用Match,Java14也對模式匹配有了些許支持,主要體如今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編寫代碼是什麼樣子的? code
有沒以爲每次定義個(Java類)POJO,須要寫大量的get,set方法還得重寫equals方法特別麻煩,是否是也想要Scala中的樣例類、Rust中的類元組struct那樣簡潔的類型定義方式?
Java14提供了record,能夠這樣定義類型了: htm
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