switch的新特性但是源遠流長,早在JDK 12就以預覽功能被引入了,最終在JDK 14成爲了正式版本的功能:JEP 361: Switch Expressions (Standard)。java
其實Switch新增的功能有兩個,一個就是能夠連寫case,一個就是switch能夠帶返回值了。git
就在我興致勃勃的想要建立一個以switch命名的package的時候,忽然間發如今IDEA中竟然建立不java類了。github
通過個人再三嘗試,反覆更名,終於被我發現了隱藏在裏面的小祕密:spa
java key word是不能被用在package名字中的。好吧,一直以來package的名字就那麼多個,如今想建立一個拉風一點的,竟然發現還有這樣一個規則。code
那麼java key word有哪些呢? 下面就是了。cdn
先看一個老版本的例子:blog
@Test
public void useOldSwitch(){
switch (MONDAY) {
case MONDAY:
case FRIDAY:
case SUNDAY:
System.out.println(6);
break;
case TUESDAY:
System.out.println(7);
break;
case THURSDAY:
case SATURDAY:
System.out.println(8);
break;
case WEDNESDAY:
System.out.println(9);
break;
}
}
複製代碼
上面的例子中,咱們想要匹配全部的星期,而後打印出相應的結果。寫了不少個case語句,不美觀。get
再看一下新版本的例子:博客
@Test
public void useNewSwitch(){
switch (MONDAY) {
case MONDAY, FRIDAY, SUNDAY -> System.out.println(6);
case TUESDAY -> System.out.println(7);
case THURSDAY, SATURDAY -> System.out.println(8);
case WEDNESDAY -> System.out.println(9);
}
}
複製代碼
一個漂亮的連寫,將一切都帶走。string
注意這裏switch語句沒有返回值,因此並不須要default語句。
考慮一個在switch中賦值的狀況:
@Test
public void oldSwitchWithReturnValue(){
int numLetters;
switch (MONDAY) {
case MONDAY:
case FRIDAY:
case SUNDAY:
numLetters = 6;
break;
case TUESDAY:
numLetters = 7;
break;
case THURSDAY:
case SATURDAY:
numLetters = 8;
break;
case WEDNESDAY:
numLetters = 9;
break;
default:
throw new IllegalStateException("這天沒發見人!");
}
}
複製代碼
傳統方式咱們須要定義一個局部變量,並在case中給這個局部變量賦值。
咱們看下怎麼使用新版的switch替換:
@Test
public void newSwitchWithReturnValue(){
int numLetters = switch (MONDAY) {
case MONDAY, FRIDAY, SUNDAY -> 6;
case TUESDAY -> 7;
case THURSDAY, SATURDAY -> 8;
case WEDNESDAY -> 9;
default -> throw new IllegalStateException("這天沒發見人!");
};
}
複製代碼
是否是很是簡單。
注意,這裏須要一個default操做,不然會報編譯錯誤。由於可能存在未遍歷的值。
上面的switch返回值的狀況,若是case後面的表達式比較複雜,那麼就須要使用大括號來圍起來。這種狀況咱們須要使用到yield來返回要返回的值。
@Test
public void withYield(){
int result = switch (MONDAY) {
case MONDAY: {
yield 1;
}
case TUESDAY: {
yield 2;
}
default: {
System.out.println("不是MONDAY,也不是TUESDAY!");
yield 0;
}
};
}
複製代碼
本文介紹了JDK14中的switch新特性。也是惟一正式版本的新特性....
本文做者:flydean程序那些事
本文連接:www.flydean.com/jdk-14-swit…
本文來源:flydean的博客
歡迎關注個人公衆號:程序那些事,更多精彩等着您!