"La principale differenza tra una cosa che potrebbe andare male e una cosa che non si può andare storto è che quando una cosa che non si può andare storto va male di solito si rivela essere impossibile da ottenere in o riparazione. " -Douglas AdamsCome posso gestire una IOException che so non può mai essere lanciata, in modo sicuro e leggibile?
Ho una classe FileItems. Il costruttore FileItems accetta un file e genera un'eccezione (FileNotFoundException) se il file non esiste. Altri metodi di quella classe implicano anche operazioni sui file e quindi hanno la possibilità di lanciare FileNotFoundException. Mi piacerebbe trovare una soluzione migliore. Una soluzione che non richiede che altri programmatori gestiscano tutte queste estremamente improbabili FileNotFoundExceptions.
I fatti della materia:
- il file è stato controllato per esistere, ma esiste la possibilità estremamente improbabile che attraverso alcuni importanti colpa della realtà il file potrebbe essere eliminato prima che questo metodo viene chiamato.
- Poiché la probabilità che 1 si verifichi è estremamente diversa e irrecuperabile, preferirei definire un'eccezione non controllata.
- Il file è già stato trovato esistere, costringendo altri programmatori a scrivere codice e catturare l'opzione FileNotFoundException verificata sembra noiosa e inutile. Il programma dovrebbe fallire completamente a quel punto. Ad esempio c'è sempre la possibilità che un computer possa catch fire, but no one is insane enough to force other programmers to handle that as a checked exception.
- Mi imbatto in questo tipo di problema di eccezione di volta in volta e definendo eccezioni non controllate personalizzate ogni volta che si verifica questo problema (la mia vecchia soluzione) è faticoso e si aggiunge a code-bloat.
Il codice attualmente assomiglia a questo
public Iterator getFileItemsIterator() {
try{
Scanner sc = new Scanner(this.fileWhichIsKnowToExist);
return new specialFileItemsIterator(sc);
} catch (FileNotFoundException e){ //can never happen}
return null;
}
Come posso fare questo meglio, senza definire un FileNotFoundException incontrollato personalizzato? C'è un modo per lanciare un checkedException su uncheckException?
I principali errori della realtà avvengono sorprendentemente spesso. –
I guasti della realtà hanno rotto il mio software perfetto per tutta la settimana. Ho provato a presentare alcune segnalazioni di bug ma sembra che anche il loro server jira sia inattivo http://jira.reality.net/ –