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 è NumberFormatExceptionun'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
NumberFormatExceptioncome parte della firma del metodo. - Dovrei definire la mia eccezione controllata (
BadDataException), gestireNumberFormatExceptionall'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 miaBadDataExceptionse 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 Strings. 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 Strings, li converte in se intvisualizza 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
Stringaint - Un luogo in cui aggiungi 2
ints
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 .