在开发中  if else 实在是多啊
     刚敲完代码,看了下  又发现N多个 if else啊
     希望大家给个好的建议啊。
     有段时间没发帖了,顺便散点分、、、

解决方案 »

  1.   

    use pattern, such as chain of responsibility
      

  2.   

    1、能用条件三元运算符的时候尽量用,但是业务逻辑可能会看不清晰2、能用switch的时候尽量用3、多用if{ return; }...if{ return; }...结构,或者while(true) { if { break; }...if { break; }...break; }结构(用于不方便退出整个方法的时候,但有死循环风险,代码习惯好的可以用),分支条件清晰,多层嵌套if...else...最容易犯错误4、尽量分拆方法,让if...else...里面只有一句方法调用,逻辑也清晰目前采用的就这么多,楼主可以参考一下。
      

  3.   

    使用switch或者enum,如果项目很大或者涉及到系统的合理性来说,使用设计模式也是很不错的选择,比如说责任链设计模式:http://4ujava.javaeye.com/blog/547166
      

  4.   

    逻辑重要,没有办法的事情 if()else if()
      

  5.   

       是swing还是web哦....
      

  6.   

    如果想把所有的if else逻辑都提取出来,可以考虑用规则引擎iLog,drools这些就是来把复杂的业务逻辑通过配置文件的方式提取出来,以后改甚至加新的业务逻辑不用更改代码了,改配置文件即可
      

  7.   

    不用if else的话就只能用if return……
      

  8.   

    我知道的避免ifelse的方法:
    第一种是表驱动法:就是一开始就把所有的可能的数据都存放起来
    第二种是用状态/策略模式
    具体采取什么办法,就是看你要实现的功能了....
      

  9.   

    一般的话,多用while 来代替if 语句,尤其是当有很多if 语句的时候if语句相对while 语句来看,存在一定的缺陷..所以建议考虑多使用while语句.
      

  10.   

    if else 很常用啊,为什么要不用if else呢? 总是要做布尔运算的么
    如果说,因为if else 很多,可以考虑用 监听者 模式, 把逻辑判断放到若干个监听者里,每个监听者处理一种情况,有数据进来就给所有的监听者,直到有人处理为止本质上还是要用if else关键看你的目的了
      

  11.   

    how are U
    How old are U
      

  12.   

    用 a?b:c 的格式,功能相当于if-else,格式上简单一些,推荐~~
      

  13.   

    用switch,不过java的switch好像只支持int和char还有可以用离散数学里的关系运算把条件化简或结合
      

  14.   

    责任链设计模式是不是把if else封装起来了,不是太明白,呵呵,初学。还有头像很不错。
      

  15.   

    如果怕if else嵌套多了会混乱,除了用模式这些方法外,我觉得可以把条件里的逻辑写成一个个小的private方法,如下:      if (a) {          doA();         } else if (b) {          doB();         } else {          doC();         }   doA() {}
       doB() {}
       doC() {}这样看上去思路会稍微清晰一点,希望对你有帮助。Good Luck!
      

  16.   

      就是看的有点烦啊
        if else if  if else 感觉这样写代码和在学校还是一样的
       看起来就是不爽啊
      

  17.   

    不用 if else 我可能就不会写程序了 
      

  18.   

    以论坛帖子为例子,如ForumMessage是一个模型,但是实际中帖子分两种性质:主题贴(第一个根贴)和回帖(回以前帖子的帖子),这里有一个朴素的解决方案:
    建立一个ForumMessage,然后在ForumMessage加入isTopic这样判断语句,注意,你这里一个简单属性的判断引入,可能导致你的程序其他地方到处存在if else 的判断。
      如果我们改用另外一种分析实现思路,以对象化概念看待,实际中有主题贴和回帖,就是两种对象,但是这两种对象大部分是一致的,因此,我将ForumMessage设为表达主题贴;然后创建一个继承ForumMessage的子类ForumMessageReply作为回帖,这样,我在程序地方,如Service中,我已经确定这个Model是回帖了,我就直接下溯为ForumMessageReply即可,这个有点类似向Collection放入对象和取出时的强制类型转换。通过这个手段我消灭了以后程序中if else的判断语句出现可能。
      

  19.   

    如何是具體的值,可以用swith(){ case:
    //.....
     break;}
    代替
      

  20.   

    将if else用在小地方还可以,如简单的数值判断;在实现业务功能时一般使用设计模式解决。如果你做了不少系统,很久没有使用if else了,那么说明你可能真正进入OO设计的境地了。
      

  21.   

    纯属个人习惯问题,在写代码的时候,把IF ELSE 对齐就没这问题了
      

  22.   

    曾经听人说过,如果你的代码中,有很多的if...else的话,说明你的代码面向对象不好!或许是认识肤浅吧,我还是认为if和else都是逻辑判断必须的!楼上有几位兄弟说的,用switch替换,个人和if一样的!没有什么本质的区别!
      

  23.   

    你可以贴段你的代码出来让大家给你优化下 实际上有些时候由于条件的重复判断的确会出现很多该死的if else组合 写的时候就那么写吧 当你写完的时候我希望你能换个角度 看看自己写的这段代码严谨不严谨
      

  24.   

    在项目中是的少用点if else但是有时得用还是用点。逻辑问题的时候。但是可以使用设计模式试试规划下。最主要的是要结构清晰。
      

  25.   


        是啊   代码写了几年了啊  工作2年了啊  可发现代码还是if else啊  看起来很不爽 啊
       气愤啊  大家有好的方法再说说吧   分可以再加的
      

  26.   

    善于用return;
    一些if语句可以不需要else。一些if语句 判断完成立,可直接返回,无需向下走。
    其实if else 是别的语言无可替代的,你有时候还必须得用。
    我记得switch case 好像只能用int类型作为参数的?
      

  27.   

       int  和 char
      

  28.   

    能用switch的时候不用if...else啊,效率高些嘛!
      

  29.   

    不建议使用过多的if else ,switch. 因为可扩展性差,而且难维护.可以尝试用多态
      

  30.   

    package com.csdn;interface Animal {
    void speak();
    }class Dog implements Animal {
    @Override
    public void speak() {
    System.out.println("dog speak.");
    }
    }class Cat implements Animal {
    @Override
    public void speak() {
    System.out.println("cat speak.");
    }
    }class Pig implements Animal {
    @Override
    public void speak() {
    System.out.println("pig speak.");
    }
    }public class NoIfElse {
    // 比方说现在有个需求,
    // 通过state状态来判断那种动物叫
    // 0让狗叫,1让猫叫,2让猪叫 /**
     * 方法1
     */
    private void animalSpeak(int state) {
    Animal[] animals = { new Dog(), new Cat(), new Pig() };
    animals[state].speak();
    } /**
     * 方法2,没有用到Animal接口
     */
    private void animalSpeak2(int state) {
    if (state == 0) {
    new Dog().speak();
    }
    if (state == 1) {
    new Cat().speak();
    }
    if (state == 2) {
    new Pig().speak();
    }
    } public static void main(String[] args) {
    NoIfElse t = new NoIfElse();
    int state = 1; t.animalSpeak(state); t.animalSpeak2(state);
    }
    }LZ比较下方法1和方法2
      

  31.   

    条件判断无法避免的, 充其量只是换下形式而已.!
    if else 无所谓.! 但是尽量不要嵌套, 嵌套多了把你自己都套晕了的
    LS的说的if return是个比较好避免嵌套的解决方案!
      

  32.   

    设计模式:
     switch  用Adapter
    设计模式  
      

  33.   

    太多if else的情况,用三目运算符很难阅读
      

  34.   

    能用条件三元运算符
    用switch
      

  35.   

    我是来学习的,if else过多,就用些return,和switch吧。
      

  36.   

    if () {
       if () {
          if () {
          }else {}
       }else {
       }
    }解决:
    写一个方法:
    public static Integer isArrBoolean(boolean[] bs){
       Integer flag = 0;
       for(int i=0;i<bs.length;i++) {
    if (!bs[i]) break;
    flag++;
       }
       return flag;
    }程序中调用:
    boolean b1 = Utils.toNa(map.get("opId")) >0;
    boolean b2 = Utils.toNa(map.get("roleId")) >0;
    boolean b3 = Utils.toNa(map.get("topId")) >0;
    boolean[] bs = {b1,b2,b3};
    int flag = Utils.isArrBoolean(bs);switch (flag) {
       case 1: sb.append(" and m.operator.opId =").append((Integer)(map.get("opId")));break;
       case 2: sb.append(" and (m.role.roleId =").append((Integer)(map.get("roleId")));
               sb.append(" or m.operator.opId =").append((Integer)(map.get("opId"))).append(")");
               break;
       case 3: sb.append(" and (m.role.roleId =").append((Integer)(map.get("roleId")));
               sb.append(" or m.toOper.opId =").append((Integer)(map.get("topId")));
               sb.append(" or m.operator.opId =").append((Integer)(map.get("opId"))).append(")");
               break;
       default: break;
    }