Java14不得不知的5個(gè)新功能

Java14不得不知的5個(gè)新功能

雖然我們現(xiàn)在還用的JDK8

文本塊

以前在Java里寫個(gè)長(zhǎng)點(diǎn)的字符串是這個(gè)樣子地:

String sql = "select * from t_tianlangstudio_student"?

+ " where age > 23 and age < 30"?

+? " and? sex = 1";


如果字符串中再包含有雙引號(hào)還需要轉(zhuǎn)義,雖然有IDE幫忙,但還是時(shí)常羨慕Scala、Rust里的文本塊(多行字符串)的寫法,那個(gè)酸爽,Java14里終于也可以這樣寫了:

public static String? index = """

<html>

<head>

? ? ? <title>tianlangstudio</title>

</head>

<body>

? ? ? <h1>一個(gè)不安分的程序員</h1>

</body>

</html>

""";

是不是清爽多了?

Switch表達(dá)式

以前使用switch大概是這個(gè)樣子地 :

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;

}


現(xiàn)在可以這樣寫了:

public static int code(String s)? {

int result = switch(s) {

? ? ? ? ? ? ? ? ? case "a"? , "b"? -> 1;

? ? ? ? ? ? ? ? ? case "c"? -> 2;

? ? ? ? ? ? ? ? ? default -> 100;

? ? ? ? }

? ? ? ? return result;

}


是不是清爽了很多?Java也開始區(qū)分表達(dá)式和(聲明)語(yǔ)句了?關(guān)于表達(dá)式和語(yǔ)句可以參考Rust.

不過Rust里更多使用Match,Java14也對(duì)模式匹配有了些許支持,主要體現(xiàn)在instanceOf的使用上。

instanceOf

使用instanceOf判斷一個(gè)變量是否屬于某個(gè)類型的實(shí)例的同時(shí),還能聲明一個(gè)變量作為當(dāng)前類型的實(shí)例進(jìn)行更多的判斷.就像這個(gè)樣子:

? ? ? 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 ??梢宰孕心X補(bǔ)下要使用JDK8編寫代碼是什么樣子的?

record

有沒覺得每次定義個(gè)(Java類)POJO,需要寫大量的get,set方法還得重寫equals方法特別麻煩,是不是也想要Scala中的樣例類、Rust中的類元組struct那樣簡(jiǎn)潔的類型定義方式?

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){}


就問你清爽不清爽 ?

更有用的空指針異常提示信息

你是否也像我一樣經(jīng)常寫鏈?zhǔn)秸{(diào)用的代碼,就像這樣:

String str = obj.fieldA.fieldAA.fieldAAA;

這樣寫起來可以少費(fèi)幾根頭發(fā)起變量名稱,直到出現(xiàn)了空指針異常,異常信息只告訴你那一行出現(xiàn)了空指針,為了調(diào)試代碼只好類似這樣:

System.out.println(obj);

System.out.println(obj.fieldA);

System.out.println(obj.fieldA.fieldAA);

String str = obj.fieldA.fieldAA.fieldAAA;


是否也曾像我一樣從心底升起無數(shù)個(gè)草泥馬. 可能是我們的呼喚起了作用,終于在Java14中會(huì)告訴你具體那個(gè)代碼調(diào)用出了空指針。記得要在代碼執(zhí)行時(shí)設(shè)置:

-XX:+ShowCodeDetailsInExceptionMessages

如果你像我一樣不想升級(jí)JDK又想嘗試新的寫法也可以考慮新語(yǔ)言如:ScalaRust語(yǔ)言.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容