代码之家  ›  专栏  ›  技术社区  ›  Nicolas Raoul

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

  •  2
  • Nicolas Raoul  · 技术社区  · 15 年前

    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;
    }
    

    我应该:

    • 使用单独的变量“tomotoeater”和“potatoEater”,会降低代码的可维护性吗?
    • 只在第一次定义“eater”,会导致潜在的混乱吗?
    • 添加大括号,使代码更冗长?
    • 有更好的主意吗?
    5 回复  |  直到 15 年前
        1
  •  6
  •   Jon Skeet    15 年前

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

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

    事实上

        2
  •  2
  •   Nivas    15 年前

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

        3
  •  1
  •   CurtainDog    15 年前

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

    Eater eater = vegetable.getEater(many parameters);
    if (eater != null) eater.eat(more parameters);
    else doSomethingElse();
    return true;
    
        4
  •  0
  •   Joel    15 年前

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

        5
  •  0
  •   Community Mohan Dere    8 年前