Jest jeszcze jeden sposób obejścia tego problemu - opakowanie parametrów w obiekt.
Sam to czasami robię zamiast tworzyć metodę z 10 argumentami.
Kopiuj
public void dodajZdarzenie(ParametryZdarzenia parametry) {
if (parametry.getRodzajZdarzenia == null) {
throw new IllegalArgumentException("Nie podano rodzaju zdarzenia");
}
if (parametry.getDataZdarzenia() == null) {
parametry.setDataZdarzenia(new Date());
}
if (parametry.getPriorytet() == null) {
parametry.setPriorytet(Priorytet.DOMYSLNY);
}
if (parametry.getKomentarz() == null) {
parametry.setKomentarz("");
}
dodajZdarzenieImpl(parametry);
}
Dzięki temu nie ma problemu z kolejnością parametrów oraz nie trzeba tworzyć całej masy przeciążonych metod.
Głównym problem to sytuacje typu "jeżeli podano A i B to rób X, a jeżeli podano tylko A to Y". Jeżeli takich sytuacji jest dużo, to nie należy stosować tej metody, bo powstanie cała masa if'ów.
Kopiuj
private static final String DOMYSLNY_KOMENTARZ = "";
public void dodajZdarzenie(RodzajZdarzenia rodzajZdarzenia) {
dodajZdarzenieImpl(rodzajZdarzenia, new Date(), Priorytet.DOMYSLNY, DOMYSLNY_KOMENTARZ);
}
public void dodajZdarzenie(RodzajZdarzenia rodzajZdarzenia, Date dataZdarzenia) {
dodajZdarzenieImpl(rodzajZdarzenia, dataZdarzenia, Priorytet.DOMYSLNY, DOMYSLNY_KOMENTARZ);
}
public void dodajZdarzenie(RodzajZdarzenia rodzajZdarzenia, Priorytet priorytet) {
dodajZdarzenieImpl(rodzajZdarzenia, new Date(), priorytet, DOMYSLNY_KOMENTARZ);
}
public void dodajZdarzenie(RodzajZdarzenia rodzajZdarzenia, Date dataZdarzenia, Priorytet priorytet) {
dodajZdarzenieImpl(rodzajZdarzenia, dataZdarzenia, priorytet, DOMYSLNY_KOMENTARZ);
}
public void dodajZdarzenie(RodzajZdarzenia rodzajZdarzenia, String komentarz) {
dodajZdarzenieImpl(rodzajZdarzenia, new Date(), Priorytet.DOMYSLNY, komentarz);
}
public void dodajZdarzenie(RodzajZdarzenia rodzajZdarzenia, Date dataZdarzenia, String komentarz) {
dodajZdarzenieImpl(rodzajZdarzenia, dataZdarzenia, Priorytet.DOMYSLNY, komentarz);
}
public void dodajZdarzenie(RodzajZdarzenia rodzajZdarzenia, Priorytet priorytet, String komentarz) {
dodajZdarzenieImpl(rodzajZdarzenia, new Date(), priorytet, komentarz);
}
public void dodajZdarzenie(RodzajZdarzenia rodzajZdarzenia, Date dataZdarzenia, Priorytet priorytet, String komentarz) {
dodajZdarzenieImpl(rodzajZdarzenia, dataZdarzenia, priorytet, komentarz);
}