Całkiem głupie pytanie. Biorąc pod uwagę kod:
public static int sum(String a, String b) /* throws? WHAT? */ {
int x = Integer.parseInt(a); // throws NumberFormatException
int y = Integer.parseInt(b); // throws NumberFormatException
return x + y;
}
Czy możesz powiedzieć, czy to dobra Java, czy nie? To, o czym mówię, NumberFormatException
jest niezaznaczonym wyjątkiem. Nie musisz określać tego jako części sum()
podpisu. Co więcej, o ile rozumiem, idea niezaznaczonych wyjątków ma na celu tylko zasygnalizowanie, że implementacja programu jest nieprawidłowa, a co więcej, przechwytywanie niezaznaczonych wyjątków jest złym pomysłem, ponieważ jest to jak naprawianie złego programu w czasie wykonywania .
Czy ktoś mógłby wyjaśnić, czy:
- Powinienem określić
NumberFormatException
jako część podpisu metody. - Powinienem zdefiniować swój własny sprawdzony wyjątek (
BadDataException
), obsłużyćNumberFormatException
wewnątrz metody i ponownie wyrzucić go jakoBadDataException
. - Powinienem zdefiniować mój własny sprawdzony wyjątek (
BadDataException
), zweryfikować oba ciągi w sposób podobny do wyrażeń regularnych i wyrzucić mój,BadDataException
jeśli nie pasuje. - Twój pomysł?
Aktualizacja :
Wyobraź sobie, że to nie jest framework open source, którego powinieneś używać z jakiegoś powodu. Patrzysz na sygnaturę metody i myślisz - „OK, ona nigdy nie rzuca”. Pewnego dnia miałeś wyjątek. Jest to normalne?
Aktualizacja 2 :
Są komentarze, które mówią, że mój sum(String, String)
projekt jest zły. Całkowicie się zgadzam, ale dla tych, którzy uważają, że pierwotny problem nigdy by się nie pojawił, gdybyśmy mieli dobry projekt, oto dodatkowe pytanie:
Definicja problemu jest następująca: masz źródło danych, w którym liczby są przechowywane jako String
s. Źródłem tym może być plik XML, strona internetowa, okno pulpitu z 2 polami edycji, cokolwiek.
Twoim celem jest zaimplementowanie logiki, która zajmuje te 2 String
sekundy, konwertuje je na int
si wyświetla okno komunikatu „Suma to xxx”.
Bez względu na to, jakie podejście zastosujesz do zaprojektowania / wdrożenia tego, będziesz mieć następujące 2 punkty wewnętrznej funkcjonalności :
- To miejsce, gdzie można przekonwertować
String
doint
- Miejsce, w którym dodajesz 2
int
s
Podstawowym pytaniem dotyczącym mojego oryginalnego posta jest:
Integer.parseInt()
oczekuje przekazania poprawnego ciągu. Ilekroć przekażesz zły ciąg , oznacza to, że twój program jest nieprawidłowy (a nie „ twój użytkownik jest idiotą”). Musisz zaimplementować fragment kodu, w którym z jednej strony masz Integer.parseInt () z semantyką MUST, az drugiej strony musisz być OK z przypadkami, gdy dane wejściowe są niepoprawne - POWINIENEŚ semantykę .
A więc pokrótce: jak zaimplementować semantykę POWINIENEM, jeśli mam tylko MUSI biblioteki .