如何在Java中替换许多if语句?

时间:2019-06-03 14:12:43

标签: java if-statement simplify code-cleanup

我正在尝试使代码更“干净”。我有许多带有很多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);
                }

5 个答案:

答案 0 :(得分:3)

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

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

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

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

答案 1 :(得分:3)

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

答案 2 :(得分:0)

您可以通过将其更改为switch()结构来替换if,else if,else if ...结构,如下所示:

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
}

答案 3 :(得分:0)

根据您的情况,您可以用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
}

答案 4 :(得分:0)

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