Java14不得不知的5個新功能雖然我們現在還用的JDK8
文本塊
以前在Java裡寫個長點的字元串是這個樣子地:String sql = "select * from t_tianlangstudio_student" + " where age > 23 and age
如果字元串中再包含有雙引号還需要轉義,雖然有IDE幫忙,但還是時常羨慕Scala、Rust裡的文本塊(多行字元串)的寫法,那個酸爽,Java14裡終于也可以這樣寫了:public static String index = """
tianlangstudio
一個不安分的程式員
""";12345678910
是不是清爽多了?
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;}12345678910111213141516
現在可以這樣寫了: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的使用上。
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");
}
}12345
沒看出哪裡不一樣了?注意看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){}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
如果你像我一樣不想更新JDK又想嘗試新的寫法也可以考慮新語言如:Scala 或Rust語言.