Come ho capito da diversi tutorial, RuntimeExceptions in realtà non dovrebbe essere catturato, perché devono rivelare un uso inappropriato dei metodi, in particolare delle API, corretto?
Inoltre, si potrebbe supporre che il programma non è in grado di ripristinare da RuntimeExceptions.
Ora, ho riscontrato un caso in cui potevo ricevere una IndexOutOfBoundsException a causa dell'input dell'utente non valido: il programma riceve una stringa da un modulo HTML e desidera convalidarlo se contiene un numero intero.
Fondamentalmente la stringa assegnata è abbinata a un motivo e quindi viene determinata la posizione della virgola. Successivamente, è necessario esaminare la prima cifra dietro la virgola per decidere come arrotondarla correttamente. Questa è la parte critica:Gestione di RuntimeException in determinate circostanze valide?
firstDecimalChar = formattedValue.charAt(dotPosition + 1);
Questa affermazione genera l'eccezione, se l'utente ha immesso qualcosa come "27" A causa del fatto che questo è basato su strani input da parte dell'utente, mi sono chiesto se questa Eccezione si comporta effettivamente come un'eccezione comune (per così dire).
La maggior parte dei tutorial (ad esempio oracle) categorizza controllato Eccezioni come errori risultanti da un input non valido, ovvero il nome percorso errato in un file che deve essere aperto e con qualche correzione o un suggerimento utente è possibile recuperare da quell'errore. Lo stesso qui: si potrebbe semplicemente impostare sopra la variabile su zero, perché questo è ciò che significa quando qualcuno inserisce "27". -> "27.0"
È quella cattura e specificare requisito davvero così severo? Naturalmente, si può verificare in anticipo se la posizione non è fuori campo, ma la mia domanda è se c'è una linea retta tra spuntata e eccezioni deselezionate. Mi chiedo se ci siano degli svantaggi tecnici perché le eccezioni dovrebbero essere evitate il più spesso possibile. (Qualcuno ha menzionato JVM-overhead, ma è significativo?)
Penso di aver bisogno di chiarimenti più approfonditi qui, perché la maggior parte dei tutorial non mi convincono: "semplicemente non dovresti farlo". Poiché in questo caso ritengo che questa eccezione si comporti come una selezionata dall'eccezione da cui è facile eseguire il ripristino.
Nota: Nel mio codice controllo se la posizione della stringa è valida o meno e non rilevo l'eccezione - quindi non fa parte di questa domanda:) Ma questo caso mi tiene occupato, ancora.
Non mi piace che Java non abbia un modo per verificare se una stringa è un intero senza generare un'eccezione. La validazione delle stringhe non è un caso/problema eccezionale. Dovrebbero portare TryParse in Java di C#. –
@RoyT. Una semplice regex ti permette di controllare se 'String' è un numero intero. ('" -? \\ d + (\\. \\ d +)? "' – CKing
@ChetanKinger true, anche se sarebbe bello se tutti i tipi primitivi avessero un controllo integrato, ma abbiamo bisogno di lottare con espressioni rege e roba. la maggior parte dei casi significa che i programmatori sono piuttosto pigri e usano solo un try catch :). –