Dire che sono che si occupa dicostretto a utilizzare un metodo API di libreria che genera una sorta di eccezione di base non descrittiva; per esempio "lancia Eccezione" in Java. Supponiamo che io non abbia la possibilità di modificare l'origine della libreria e che io debba gestire l'eccezione di base ogni volta che chiamo il metodo API dai miei metodi. Per alcuni contesto, il mio codice potrebbe essere simile senza l'intervento:Come affrontare l'eccezione di base generata dal metodo API?
public void myMethod() throws Exception { // I don't want to do this.
someAPIObject.theirMethod(); // API method throwing base exception.
}
E qui potrebbe essere il metodo API Sto chiamando per:
public void theirMethod() throws Exception { // This is my problem.
// Does stuff that could cause problems, but is
// lazy and implicitly throws base exception.
// Now it's my problem!
}
La mia domanda è: come faccio meglio andare a fare i conti con questa eccezione di base che viene lanciata ai miei metodi? Suppongo che sia nel mio interesse conservare in qualche modo tutte le informazioni sulle eccezioni originali mentre propagando qualcosa di più utile di un'eccezione di base. Per esempio, ho considerato la cattura e lo stoccaggio l'eccezione di base nel mio tipo di eccezione e gettando che invece:
public void myMethod() {
try {
someAPIObject.theirMethod(); // API method throwing base exception.
} catch (Exception e) {
throw new MySpecificException(e); // Re-throw my own exception.
}
}
Io non sto cercando opinioni, ma piuttosto qualche prova solida e lineare (pro) sul perché una soluzione particolare è una buona soluzione, così come qualsiasi cavaet (contro). Il mio obiettivo è su Java, ma sono curioso di eventuali concetti generali o "best practice".
Sono costernato che questa domanda abbia ottenuto voti ravvicinati. È un problema molto reale nello sviluppo del software. Sebbene non ci sia una vera risposta, ci sono soluzioni oggettive con ragioni citabili. – VGR
Lancio 'Exception' stesso o qualche sottoclasse sconosciuta? Se il primo, 'instanceof' non farà nulla per te. – ssube
@ssube In questo caso, sì, lancia l'eccezione stessa. Ho fatto alcuni chiarimenti. – Arcensoth