如果我想使用case语句测试enum
的多个值,并且80%的case语句需要两个不同的if
检查,那么它是否被认为是不能重复使用该代码的编码过度?
我实际上使用了ctrl+c
和ctrl+v
,觉得代码上帝会杀了我。
以下是一些观点:
switch(value) {
case value1:
{
if(something) { //do something; }
if(somethingElse) { // do something else; }
//unique for value1
}
break;
case value2:
{
//unique for value2
}
break;
case value3:
{
if(something) { //do something; }
if(somethingElse) { // do something else; }
//unique for value3
}
break;
case value4:
{
if(something) { //do something; }
if(somethingElse) { // do something else; }
//unique for value4
}
break;
case value5:
{
//unique for value5
}
break;
default:
break;
我的value
是从enum
随机生成的,被称为随机数量。目标是value
是任意随机的“价值”,完全独立于其他情况。
答案 0 :(得分:4)
您可能希望将此重复代码放入方法中。
public void yourFunctionCall() {
//Could even pass the value if needed
if(something) { //do something; }
if(somethingElse) { // do something else; }
}
然后在你的情况下调用这个方法:
switch(value) {
case value1: {
yourFunctionCall();
//or yourFunctionCall(value1);
//unique for value1
} //etc..
答案 1 :(得分:2)
如果这是一段可重复使用的代码,那么最好将其转换为方法。如果没有,您只需使用fall-through添加另一个覆盖公共代码的switch case
:
switch (value) {
case value1:
case value3: // using fall-through
case value4:
{
if (something) { /* do something; */ }
if (somethingElse) { /* do something else; */ }
}
}
switch (value) {
case value1:
{
// unique for value1
break;
}
case value2:
{
// unique for value2
break;
}
// other unique cases
}
答案 2 :(得分:2)
使用函数可能更好,但这是另一种方式:
case value1:
case value3:
case value4:
if(something) { /* do something */ }
if(somethingElse) { /* do something else */ }
if (value1)
{
//unique for value1
}
else if (value3)
{
//unique for value3
}
else // if (value4)
{
//unique for value4
}
break;
case value2:
...
或者使用嵌套开关:
case value1:
case value3:
case value4:
if(something) { /* do something */ }
if(somethingElse) { /* do something else */ }
switch(value)
{
case value1: /* unique for value1 */ break;
case value3: /* unique for value3 */ break;
case value4: /* unique for value4 */ break;
}
break;
case value2:
...
谨慎使用,我不会真正推荐生产代码。