Я пытаюсь сделать свой код "чище". У меня много функций с большим количеством операторов if. Как я могу заменить их?
Я использую 4 разных Hashtables, поэтому у меня есть эти 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);
@Каж, наверное, да, однако NewsInter.put(""+nNews, n); можно вообще извлечь из if, поскольку он повторяется в каждой ветке if.
Спасибо за ваши ответы!
Используйте команду Switch Case, которая занимает меньше памяти при обработке
Спасибо за ваш ответ, но HashTable тоже меняется. Я думаю, что добавление еще одного параметра с хеш-таблицей может быть хорошим.