2014-10-18 46 views
2

我回答一個Java測試和遇到的問題:結合斷言和switch語句

以下哪項是正確的?

答:在assert語句中,冒號(:)後面的表達式可以是任何Java表達式,即 。

B.如果開關塊沒有默認值,則添加斷言默認值被認爲是合適的。在斷言語句中,如果冒號(:)後面的表達式不具有 值,則斷言的錯誤消息將爲空。

D.使用catch子句處理斷言失敗是適當的。

正確的答案是B。說實話,我通過排除其他明顯錯誤的情況來回答這個問題,但我實際上無法明確這個問題的重點。任何人都可以解釋爲什麼它是真的?它在哪裏可以有所幫助?

回答

5

我想這意味着你應該保護自己免於漏掉開關盒。

假設你有一個enum Color {red, green}這個開關中的代碼:

switch(color) { 
    case red: 
     doSomethingRed(); 
     break; 
    case green: 
     doSomethingGreen(); 
     break; 
} 

如果將來添加新的色彩blue,你可以忘記在開關添加的情況下它。 添加失敗的斷言到默認情況下會拋出AssertionError,你會發現你的錯誤。

switch(color) { 
    case red: 
     doSomethingRed(); 
     break; 
    case green: 
     doSomethingGreen(); 
     break; 
    default: 
     assert false : "Oops! Unknown color" 
} 
+0

漂亮!謝謝 – 2014-10-18 14:51:00

3

這取決於案件,但依我看

// Consider expecting only 1,2 or 3 as switch case 
switch(x) 
{ 
    case 1: 
     // operations 
     break; 
    case 2: 
     // operations 
     break; 
    case 3: 
     // operations 
     break; 
    default: assert false : "Input should be between 1-3"; 
} 

可能是方便,因爲您可能會收到其他任何輸入可以被看作是一個錯誤的輸入。

+0

有趣,但我們可以拋出一個異常來得到一個類似的結果,我們可以嗎? – 2014-10-18 14:53:02