天天看點

java record用法_Java14不得不知的5個新功能一個不安分的程式員

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語言.