Cześć,
Mam w kodzie napisaną metodę która przyjmuje kilka parametrów praktycznie takich samych. Jeden parametr się tylko pomiędzy nimi różni - lista przyjmuje różne obiekty.
Tych metod jest kilkanaście, dla każdego typu obiektu oddzielna, wykonuje praktycznie to samo, różni się tylko, że w każdej z tych metod wywoływana jest inna metoda dedykowana pod konkretny typ obiektu, wygląda to w uproszczeniu tak:
private Integer generujTyp(List<Typ> lista) {
if (lista.isEmpty() || lista.size() == 1) {
{...} //elementy stałe każdej metody
uzupelnijDaneTyp(tabela, lista.isEmpty() ? null : lista.get(0));
} else {
for (Typ typVo : lista) {
{...} - //elementy stałe każdej metody
uzupelnijDaneTyp(tabela, typVo);
}
}
}
Chciałbym zrefaktorować kod pozbywając się tych metod i zastąpić ją jedną. Nie miałbym żadnego problemu, gdyby nie to, że muszę wywoływać specjalne metody (uzupelnijDaneTyp dla Typ, uzupelnijDaneTyp2 dla Typ2 itd).
Zastanawiam się, jak to najlepiej zrobić.... Myślałem, żeby każdy typ obiektu dziedziczył po tej samej abstrakcyjnej klasie i miał własną implementację metody uzupelnijDane gdzie będzie wywoływana konkretna i właściwa metoda. Tylko, że powstaje problem, bo nie zależnie od zawartości listy to uzupelnijDaneTyp musi być wywołane zawsze..
Innym sposobem to myślałem, żeby badać instanceof i wywoływac właściwe metody, ale nie podoba mi się to zbytnio...
Ktoś ma pomysł jak zrefaktorować ten kod? :)