2014-10-18 98 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