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

Nic*_*oul 2 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;
}
Run Code Online (Sandbox Code Playgroud)

我是不是该:

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

Jon*_*eet 6

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

new Eater(Potato.class, many parameters)
     .eat(more parameters);
Run Code Online (Sandbox Code Playgroud)

这样做的缺点是它使调试变得有点困难.显然这不是你真正的代码......这使得很难说正确的事情.这很可能是做正确的事实际上,在案件的尸体闯入了不同的方法.