如何替换 java 中的多个 if 语句?

How to replace many if's statements in java?

我正在尝试编写我的代码 "cleaner"。我有很多带有很多 if 语句的函数。我怎样才能更换它们?

我正在使用 4 个不同的哈希表,这就是为什么我有那些 ifs。唯一改变的是哈希表名称和我添加信息的 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);
                }

你可以将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
}

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

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

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

这消除了一些混乱,但本质上没有消除 'if' 语句的数量。

对于您的情况,您可以将其替换为 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
}

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

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