Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java风格:开关中的变量声明_Java_Switch Statement - Fatal编程技术网

Java风格:开关中的变量声明

Java风格:开关中的变量声明,java,switch-statement,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

以下代码未编译,因为
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”,可能导致混淆
  • 添加大括号,使代码更加冗长
  • 还有更好的主意吗

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

new Eater(Potato.class, many parameters)
     .eat(more parameters);
这样做的缺点是调试起来有点困难。显然这不是你真正的代码,虽然。。。这使得说正确的事情很难。很可能正确的做法是将案例主体分解为不同的方法。

为什么不这样做:

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引用,我会这样做。

使用单独的变量如何降低代码的可维护性?(第一点)。如果我想说的话,它会起到相反的作用,因为变量名更好地解释了它是什么。如果将其保持在该范围内对您很重要,我会同意这一点。

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


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



我真的不想知道doSomethingElse()方法的作用。顺便说一句,我看到了
{
过了很长一段时间后换了一行……当别人用我的方式编码时感觉很好:-)CurtainDog:哈哈,我发誓这完全是随机的!Nivas:修正;-)提取方法是你的朋友。@mjfgates:不总是。按实际情况考虑。对于两行代码,我想我通常更愿意用额外的大括号。不过,在许多其他情况下,我同意每种情况越相似,就越容易复制粘贴以创建新的情况或重构每次创建之后,如果我必须为每种情况调整变量名,那将是一件痛苦的事情。如果没有充分的理由,我会避免创建许多变量名。此外,如果不使用大括号,则会占用更多的内存。
Eater eater = vegetable.getEater(many parameters);
if (eater != null) eater.eat(more parameters);
else doSomethingElse();
return true;