Java样式:交换机中的变量声明

时间:2010-09-17 06:12:38

标签: java switch-statement

以下代码无法编译,因为eater定义了两次:

switch (vegetable) {
    case TOMATO:
        Eater eater = new Eater(Tomato.class, many parameters);
        eater.eat(more parameters);
        return true;

    case POTATO:
        Eater eater = new Eater(Potato.class, many parameters);
        eater.eat(more parameters);
        return true;

    case CARROT:
        doSomethingElse();
        return true;
}

我应该:

  • 使用单独的变量`tomatoEater`和`potatoEater`,使代码不易维护?
  • 在`switch`之前定义`eater`,使它更容易被访问?
  • 仅在第一次定义'eater`,导致潜在的混淆?
  • 添加大括号,使代码更详细?
  • 有什么好主意吗?

5 个答案:

答案 0 :(得分:6)

我个人要么使用大括号,要么完全放弃本地变量:

new Eater(Potato.class, many parameters)
     .eat(more parameters);

这样做的缺点是调试起来有点困难。显然这不是你真正的代码......这使得很难说正确的事情。正确的做法是实际上将案例的主体分解为单独的方法。

答案 1 :(得分:2)

为什么不这样:

switch (vegetable) 
{ 
    case TOMATO: 
        new Eater(Tomato.class, many parameters).eat(more parameters); 
        return true; 

    case POTATO: 
        new Eater(Potato.class, many parameters).eat(more parameters); 
        return true; 

    case CARROT: 
        doSomethingElse(); 
        return true; 
} 

如果您以后在其他任何地方都没有使用Eater参考,我会这样做。

答案 2 :(得分:1)

与您的方法不完全相同的逻辑(胡萝卜被视为默认值),但显示了另一种方法(在幕后布线,我不担心这里):

Eater eater = vegetable.getEater(many parameters);
if (eater != null) eater.eat(more parameters);
else doSomethingElse();
return true;

答案 3 :(得分:0)

如何使用单独的变量使代码不易维护? (第一点)。如果有什么我会说它会做相反的变量名更好地解释它是什么。如果把它放在那个范围对你来说很重要的话我会坚持下去。

答案 4 :(得分:0)

也许使用开关根本不是一个好主意。


In what better example can represent a switch statement in Java ?