簡介
switch的新特性可是源遠流長,早在JDK 12就以預覽功能被引入了,最終在JDK 14成爲了正式版本的功能:JEP 361: Switch Expressions (Standard)。
其實Switch新增的功能有兩個,一個就是可以連寫case,一個就是switch可以帶返回值了。
寫在前面
就在我興致勃勃的想要創建一個以switch命名的package的時候,突然間發現在IDEA中居然創建不java類了。
經過我的再三嘗試,反覆改名,終於被我發現了隱藏在裏面的小祕密:
java key word是不能被用在package名字中的。好吧,一直以來package的名字就那麼多個,現在想創建一個拉風一點的,居然發現還有這樣一個規則。
那麼java key word有哪些呢? 下面就是了。
連寫case
先看一個老版本的例子:
@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語句,不美觀。
再看一下新版本的例子:
@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);
}
}
一個漂亮的連寫,將一切都帶走。
注意這裏switch語句沒有返回值,所以並不需要default語句。
switch返回值
考慮一個在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操作,否則會報編譯錯誤。因爲可能存在未遍歷的值。
yield
上面的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新特性。也是唯一正式版本的新特性…
本文的例子https://github.com/ddean2009/learn-java-base-9-to-20
本文作者:flydean程序那些事
本文鏈接:http://www.flydean.com/jdk-14-switch/
本文來源:flydean的博客
歡迎關注我的公衆號:程序那些事,更多精彩等着您!