Dzisiaj pracowałem z klasą Java StringReader
i uznałem to za bardzo irytujące, że wyrzuca ona wyjątek IOException na metodę read
. Wiem, że to rozszerza klasę Reader
, w której metoda read
rzuca wyjątek IOException, ale myślę, że nie jest potrzebne dla StringReader. Ta klasa nie używa żadnych zewnętrznych zasobów, które mogą powodować błędy.Dlaczego Java StringReader zgłasza wyjątek IOException?
Po krótkim dochodzeniu okazało się, że StringReader#read
rzuca IOException
jeśli ciąg który brzmi ta klasa jest zerowy, ale de facto to nie może się zdarzyć ponieważ jeśli chcemy spróbować przekazać null StringReader
konstruktora rzuca NPE.
Co sądzisz o tym, czy dobrą praktyką jest zawsze rzucać te same wyjątki, co super klasa?
Edit: Jak zauważył u mad Reader to klasa nie interfejs.
Deklaracja rzutów w 'StringReader' jest obowiązkowa, ponieważ interfejs' Reader' wymaga tego, nawet jeśli klasa implementująca nigdy nie wyrzuci takiego wyjątku. –
Jakie są powody oddawania głosów? –
Czytnik jest klasą, a nie interfejsem i można zastąpić funkcję implementacją z mniejszą liczbą deklaracji lub bez wyjątków. I to zadziała. Więc nie ma powodu, żeby StringReader je zadeklarował. –