如何替换 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 命令
我正在尝试编写我的代码 "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 命令