【问题标题】:How to replace many if's statements in java?如何替换java中的许多if语句?
【发布时间】:2019-06-03 14:12:43
【问题描述】:

我正在努力让我的代码“更干净”。我有很多带有很多 if 语句的函数。我该如何替换它们?

我正在使用 4 个不同的哈希表,这就是我有这些 if 的原因。唯一改变的是哈希表名称和我添加信息的 jList。

if(n.getCategorie().getNum() == Categorie.INTERNATIONAL.getNum())
                {
                    DefaultListModel dlm = (DefaultListModel) jListInternationales.getModel();
                    dlm.addElement(n.getTitre());
                    jListInternationales.setModel(dlm);
                    NewsInter.put(""+nNews, n);
                }
                else if(n.getCategorie().getNum() == Categorie.POLITIQUE.getNum())
                {
                    DefaultListModel dlm = (DefaultListModel) jListViePolitique.getModel();
                    dlm.addElement(n.getTitre());
                    jListViePolitique.setModel(dlm);
            NewsPolitique.put(""+nNews, n);
                }
                else if(n.getCategorie().getNum() == Categorie.RAGOT.getNum())
                {
                    DefaultListModel dlm = (DefaultListModel) jListRagotsEtPotins.getModel();
                    dlm.addElement(n.getTitre());
                    jListRagotsEtPotins.setModel(dlm);
            NewsRagot.put(""+nNews, n);
                }
                else if(n.getCategorie().getNum() == Categorie.SPORT.getNum())
                {
                    DefaultListModel dlm = (DefaultListModel) jListInfosSports.getModel();
                    dlm.addElement(n.getTitre());
                    jListInfosSports.setModel(dlm);
            NewsSport.put(""+nNews, n);
                }

【问题讨论】:

    标签: java if-statement simplify code-cleanup


    【解决方案1】:

    if 分支之间的唯一区别来自 JList 引用。由于代码重复,您应该将其提取到单独的方法中:

    private void updateList(JList list) {
      DefaultListModel dlm = (DefaultListModel) list.getModel();
      dlm.addElement(n.getTitre());
      list.setModel(dlm);
    }
    

    之后代码变得更加简洁:

    if (n.getCategorie().getNum() == Categorie.INTERNATIONAL.getNum()) {
      updateList(jListInternationales);
    } else if (n.getCategorie().getNum() == Categorie.POLITIQUE.getNum()) {
      updateList(jListViePolitique);
    } // etc
    
    NewsInter.put(""+nNews, n);
    

    【讨论】:

    • 感谢您的回答,但哈希表也在发生变化。我认为在哈希表中添加另一个参数可能会很好。
    • @Kazh 可能是的,但是 NewsInter.put(""+nNews, n); 可以完全从 if 中提取出来,因为它在每个 if 分支中重复。
    • 感谢您的回答!
    【解决方案2】:

    您似乎正在使用枚举。枚举可以通过实例进行比较。不需要检查数字。

    这些可以在开关盒中使用。例如

    switch (n.getCategorie()) {
    case Categorie.INTERNATIONAL:
    ...
    

    这消除了一些混乱,但本质上不是“if”语句的数量。

    【讨论】:

      【解决方案3】:

      你可以通过将if、else if、else if、...结构体改成switch()结构体来替换它,如下所示:

      switch(n.getCategorie().getNum()){
          case Categorie.INTERNATIONAL.getNum():
              DefaultListModel dlm = (DefaultListModel) jListInternationales.getModel();
              dlm.addElement(n.getTitre());
              jListInternationales.setModel(dlm);
              NewsInter.put(""+nNews, n);
      
              break;
          case Categorie.POLITIQUE.getNum():
              ...etc
      }
      

      【讨论】:

        【解决方案4】:

        在您的情况下,您可以将其替换为 Switch 语句。

        这是结构:

        switch(value) {
          case x:
            // code block
            break;
          case y:
            // code block
            break;
          default:
            // code block
        }
        

        在您的具体问题中,这将是:

        switch(n.getCategorie()) {
          case International:
            // your code
            break;
          case Politique:
            // code block
            break;
        ...
        
          default:
            // code block
        }
        

        【讨论】:

          【解决方案5】:

          使用在处理时占用更少内存的 Switch Case 命令

          【讨论】:

            猜你喜欢
            • 2015-09-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-07-05
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多