以下代码无法编译,因为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;
}
我应该:
答案 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)