No np zalozmy ze robisz okienko z komunikatem dla uzytkownika, super waznym komunikatem. W okienku wypisujesz elementy list lub map lub wyjatkow. Np okienko bedzie dawac notowania jakies na biezaco, cokolwiek co ci sie wydaje wazne.
Robisz metode ktora bazuje na metodzie toString() przekazanych parametrow, tak jak to zrobiles. I teraz gdzies w kodzie powinienes wywolac metoda ktora pokazuje okienko z parametrem: albo lista, albo mapa, albo wyjatek.
Za 2 miesiace przychodzi nowy pracownik, widzi metoda ktora bierze Object, i dodaje taki kod ze okienko wywoluje z parametrem typu int, np 17, i wyswietla takie okienko. Kompiluje sie? Oczywiscie.
Testerzy nie sprawdzili bo costa, uzytkownik dostaje nowa wersje, i w niektorych sytuacjach zamiast super waznych informacji dostaje jakies smieci, np liczbe 17, bo programista myslal ze moze do okienka wyslac cokolwiek. No i jest dosc powazny blad, firma maklerska stracila miliardy.
Teraz pomysl ze masz specalizowane metody ktore pobieraja parametry typu java.util.List, java.util.Map lub java.lang.Throbable / Exception, i wewnetrznie tworza stringa i przekazuja go do wspolnej (prywatnej / protected( metody ktora ma wspolny kod. Zaden nowy programista korzystajac z takiej klasy nie wyswietli okienka ze zlym parametrem.
To taka czysto hipotetyczna sytuacja, ale mozliwa, a napisalem o tym dlatego ze sam niedawno mialem taka sytuacje ze niemalze wszystkie metody z API ktore mi dostarczona braly Object, a pozniej sypaly wyjatkami (pol biedy), albo sprawialy wrazenie ze wszystko (pozornie) jest ok.