无涯教程-Java14 - Switch表达式

53 阅读1分钟

switch语句允许应用程序基于运行时中给定表达式的值具有多个可能的执行路径

评估后的表达式称为选择器表达式,其类型必须为 char,byte,short,int,Character,Byte,Short,Integer,String或enum 

如果在某些情况下未处理任何遗漏的值,编译器将报错。其他表达式类型(int,string等),无涯教程还必须提供default大小写。

public class SwitchExpressions 
{
	public static void main(String[] argv) 
	{
		System.out.println(isWeekDayV1_1(Day.MON));		//true
		System.out.println(isWeekDayV1_2(Day.MON));		//true
		System.out.println(isWeekDayV2(Day.MON));		//true
	}
</span><span class="com">//1 - Return value directly</span><span class="pln">

</span><span class="kwd">enum</span><span class="pln"> </span><span class="typ">Day</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
	MON</span><span class="pun">,</span><span class="pln"> TUE</span><span class="pun">,</span><span class="pln"> WED</span><span class="pun">,</span><span class="pln"> THUR</span><span class="pun">,</span><span class="pln"> FRI</span><span class="pun">,</span><span class="pln"> SAT</span><span class="pun">,</span><span class="pln"> SUN
</span><span class="pun">};</span><span class="pln">

</span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">static</span><span class="pln"> </span><span class="typ">Boolean</span><span class="pln"> isWeekDayV1_1 </span><span class="pun">(</span><span class="typ">Day</span><span class="pln"> day</span><span class="pun">)</span><span class="pln"> 
</span><span class="pun">{</span><span class="pln">
	</span><span class="typ">Boolean</span><span class="pln"> result </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">switch</span><span class="pun">(</span><span class="pln">day</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
		</span><span class="kwd">case</span><span class="pln"> MON</span><span class="pun">,</span><span class="pln"> TUE</span><span class="pun">,</span><span class="pln"> WED</span><span class="pun">,</span><span class="pln"> THUR</span><span class="pun">,</span><span class="pln"> FRI </span><span class="pun">-&gt;</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">
		</span><span class="kwd">case</span><span class="pln"> SAT</span><span class="pun">,</span><span class="pln"> SUN </span><span class="pun">-&gt;</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">;</span><span class="pln">
	</span><span class="pun">};</span><span class="pln">
	</span><span class="kwd">return</span><span class="pln"> result</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">static</span><span class="pln"> </span><span class="typ">Boolean</span><span class="pln"> isWeekDayV1_2 </span><span class="pun">(</span><span class="typ">Day</span><span class="pln"> day</span><span class="pun">)</span><span class="pln"> 
</span><span class="pun">{</span><span class="pln">
	</span><span class="typ">Boolean</span><span class="pln"> result </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">switch</span><span class="pun">(</span><span class="pln">day</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
		</span><span class="kwd">case</span><span class="pln"> MON</span><span class="pun">,</span><span class="pln"> TUE</span><span class="pun">,</span><span class="pln"> WED</span><span class="pun">,</span><span class="pln"> THUR</span><span class="pun">,</span><span class="pln"> FRI </span><span class="pun">:</span><span class="pln"> </span><span class="kwd">yield</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">
		</span><span class="kwd">case</span><span class="pln"> SAT</span><span class="pun">,</span><span class="pln"> SUN </span><span class="pun">:</span><span class="pln"> </span><span class="kwd">yield</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">;</span><span class="pln">
	</span><span class="pun">};</span><span class="pln">
	</span><span class="kwd">return</span><span class="pln"> result</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="com">//2 - Multiple statements</span><span class="pln">

</span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">static</span><span class="pln"> </span><span class="typ">Boolean</span><span class="pln"> isWeekDayV2 </span><span class="pun">(</span><span class="typ">Day</span><span class="pln"> day</span><span class="pun">)</span><span class="pln"> 
</span><span class="pun">{</span><span class="pln">
	</span><span class="typ">Boolean</span><span class="pln"> result </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">switch</span><span class="pun">(</span><span class="pln">day</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
		</span><span class="kwd">case</span><span class="pln"> MON</span><span class="pun">,</span><span class="pln"> TUE</span><span class="pun">,</span><span class="pln"> WED</span><span class="pun">,</span><span class="pln"> THUR</span><span class="pun">,</span><span class="pln"> FRI </span><span class="pun">-&gt;</span><span class="pln">
		</span><span class="pun">{</span><span class="pln"> 
			</span><span class="typ">System</span><span class="pun">.</span><span class="kwd">out</span><span class="pun">.</span><span class="pln">println</span><span class="pun">(</span><span class="str">"It is WeekDay"</span><span class="pun">);</span><span class="pln">
			</span><span class="kwd">yield</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln"> 
		</span><span class="pun">}</span><span class="pln">
		</span><span class="kwd">case</span><span class="pln"> SAT</span><span class="pun">,</span><span class="pln"> SUN </span><span class="pun">-&gt;</span><span class="pln">
		</span><span class="pun">{</span><span class="pln"> 
			</span><span class="typ">System</span><span class="pun">.</span><span class="kwd">out</span><span class="pun">.</span><span class="pln">println</span><span class="pun">(</span><span class="str">"It is Weekend"</span><span class="pun">);</span><span class="pln">
			</span><span class="kwd">yield</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">;</span><span class="pln"> 
		</span><span class="pun">}</span><span class="pln">
	</span><span class="pun">};</span><span class="pln">
	</span><span class="kwd">return</span><span class="pln"> result</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

}

Yield与Return

return 语句将控制权返回给方法或构造函数的调用者。 yield 语句通过使封闭的switch表达式产生指定值来转移控制权。

SwitchExpression:
	Yield Statement:
    	yield Expression;
  • SwitchExpression试图找到正确的YieldStatement,以将控制权转移到最里面封闭的yield目标。
  • SwitchExpression正常终止,并且Expression的值成为SwitchExpression的值。
  • 如果出于某种原因突然完成了对Expression的求值,那么出于相同的原因,yield语句就突然完成了。

参考链接

www.learnfk.com/java/java14…