2013-05-01 50 views
0

嗨,大家好我有一个非常简单的问题:switch语句继续

我有以下代码:

for (...) 
{ 
    if(something == null) 
    { 
    switch(ENUM_TYPE) 
    { 
     case something: 
     something == new Something(); 
     break; 
     case other: 
     continue; 
     } 
     some instructions that i don't want to execute when other. 
    } 
} 

这是一个好的设计?

+0

而不是使用开关,为什么不使用一个sentinel变量来执行代码? – 2013-05-01 11:51:19

+0

摆脱if(something1)。你为什么要这样做,如果你有切换?您可以始终使用默认情况执行正常流程。 – IndoKnight 2013-05-01 11:51:52

+9

如果没有上下文,这很难确定。 (数据类型,个案数量等) – Breavyn 2013-05-01 11:52:22

回答

0

你可以尝试在案件内写下你的“一些Instuctions”代码:。所以当case是某事时它会被执行:只有。

+0

它是一个设置器,如果案例是其他 – AlexGo 2013-05-01 12:00:14

1

switch语句的基本思想是有多个可供选择的选项。

在你的例子中,你只有一个,所以使用switch语句没有任何意义。

所以从你的例子来看,如果我正确地阅读它,我会做一些更清晰,更易于阅读的语句。继续使用的问题在于它是一种跳跃,所产生的源代码有点混乱。

for (...) { 
    if (something1 && something != other) { 
    if (something == something) { 
     // do the something stuff 
    } 
    // do the stuff that is for everything else 
    } 
} 

switch语句有各种限制,以及各种替代方案的样子可能会降低switch语句的灵活性。

请参阅关于switch语句的讨论以及它如何限制为某些内置类型和枚举。 Java Switch Statement

0

不,原因很简单,你违反了“做一件事”的原则。相反:

for (...) 
{ 
    if(something == null) 
    { 
    switch(ENUM_TYPE) 
    { 
     case something://I think you have variable overloading here. 
     methodForSomethingCase(); 
     additionalInstructions(); 
     break; 
     case other: 
     //essentially do nothing 
     break; 
     default: 
     additionalInstructions(); 
    } 
    } 
} 

通过这种方式可以确保您的附加说明正交什么需要在这个方法中发生的:这是每次迭代可能的项目之间切换。这使得测试更容易。它可以更容易地更改您的附加说明,或者在每种情况下发生的情况。它使您的代码更易于阅读。而当你还有其他一些指令的情况下,它也变得很容易。

请记住:每种方法都应该只做一件事。