结合assert和switch语句

St.*_*rio 3 java assert switch-statement

我正在回答Java测试并遇到问题:

下列哪项为真?

A.在断言语句中,冒号(:)之后的表达式可以是任何Java表达式.

B.如果交换机块没有默认值,则认为添加断言默认值是合适的.

C.在断言语句中,如果冒号(:)之后的表达式没有值,则断言的错误消息将为空.

D.使用catch子句处理断言失败是合适的.

正确的答案是B.说实话,我通过排除另一个明显错误的案例回答了这个问题,但实际上我无法理解这个问题.谁能解释为什么这是真的?哪里有帮助?

pon*_*ndr 9

我想这意味着你应该保护自己不要错过开关盒.

假设你enum Color {red, green}在代码中有一个和这个开关:

switch(color) {
   case red: 
       doSomethingRed();
       break;
   case green: 
       doSomethingGreen();
       break;
}   
Run Code Online (Sandbox Code Playgroud)

如果您将来添加新颜色blue,则可能忘记在交换机中添加一个案例.将失败的断言添加到默认情况下将抛出AssertionError,您将发现错误.

switch(color) {
   case red: 
       doSomethingRed();
       break;
   case green: 
       doSomethingGreen();
       break;
   default: 
       assert false : "Oops! Unknown color"
}   
Run Code Online (Sandbox Code Playgroud)


Pum*_*kin 5

这取决于具体情况,但我是这么看的

// 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";  
}  
Run Code Online (Sandbox Code Playgroud)

可能很方便,因为您可能收到的任何其他输入都可能被视为错误输入。