Una domanda piuttosto stupida. Dato il codice:
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;
}
Potresti dire se è un buon Java o no? Quello di cui sto parlando è NumberFormatException
un'eccezione incontrollata. Non è necessario specificarlo come parte della sum()
firma. Inoltre, per quanto ho capito, l'idea di eccezioni non controllate è solo per segnalare che l'implementazione del programma non è corretta, e ancor di più, catturare eccezioni non controllate è una cattiva idea, poiché è come riparare un programma difettoso in fase di esecuzione .
Qualcuno potrebbe chiarire se:
- Dovrei specificare
NumberFormatException
come parte della firma del metodo. - Dovrei definire la mia eccezione controllata (
BadDataException
), gestireNumberFormatException
all'interno del metodo e rilanciarla comeBadDataException
. - Dovrei definire la mia eccezione controllata (
BadDataException
), convalidare entrambe le stringhe in qualche modo come espressioni regolari e lanciare la miaBadDataException
se non corrisponde. - La tua idea?
Aggiornamento :
Immagina, non è un framework open source, che dovresti usare per qualche motivo. Guardi la firma del metodo e pensi: "OK, non genera mai". Poi, un giorno, hai un'eccezione. È normale?
Aggiornamento 2 :
Ci sono alcuni commenti che dicono che il mio sum(String, String)
è un cattivo design. Sono assolutamente d'accordo, ma per coloro che credono che il problema originale non sarebbe mai apparso se avessimo un buon design, ecco una domanda in più:
La definizione del problema è questa: hai un'origine dati in cui i numeri sono memorizzati come String
s. Questa fonte può essere un file XML, una pagina web, una finestra del desktop con 2 caselle di modifica, qualunque sia.
Il tuo obiettivo è implementare la logica che prende questi 2 String
s, li converte in se int
visualizza la finestra di messaggio che dice "la somma è xxx".
Indipendentemente dall'approccio che utilizzi per progettarlo / implementarlo, avrai questi 2 punti di funzionalità interna :
- Un luogo dove si converte
String
aint
- Un luogo in cui aggiungi 2
int
s
La domanda principale del mio post originale è:
Integer.parseInt()
si aspetta che venga passata la stringa corretta . Ogni volta che passi una stringa errata , significa che il tuo programma non è corretto (non "il tuo utente è un idiota"). Devi implementare il pezzo di codice in cui da un lato hai Integer.parseInt () con la semantica MUST e dall'altro devi essere a posto con i casi in cui l'input non è corretto - semantica DOVREBBE .
Quindi, brevemente: come implementare la semantica DOVREBBE se ho solo le librerie MUST .