Sto cercando di imparare attraverso l'esempio su un modo corretto per gestire le eccezioni. Quando dovrei prenderlo, quando e come dovrei buttarlo più in basso?
In questo esempio ho una configurazione molto semplice:
- MainMethod
- ExceptionHandler // Qui è dove mi piacerebbe intercettare e risolvere la maggior parte delle eccezioni
- ExceptionGenerator // Gli errori iniziano da qui
- ExceptionHandler // Qui è dove mi piacerebbe intercettare e risolvere la maggior parte delle eccezioni
public List<String> readFile(String pathStr) throws InvalidPathException, IOException {
Path path = Paths.get(Repository.fixPath(pathStr)); // This can throw both FileNotFoundException and InvalidPathException, I think. It should!
List<String> fileContent;
try {
fileContent = Files.readAllLines(path, StandardCharsets.UTF_8);
return fileContent;
} catch (IOException e) {
throw new IOException("Could not read file content");
}
}
// FileNotFoundException (FNFE) should be sent to the previous method
private static String fixPath(String path) throws FileNotFoundException {
if (path.isEmpty() || path == null)
throw new FileNotFoundException();
...
return path;
}
Punti di interesse:
-
Il mio metodo
readFiles
deve rilevare ilFileNotFoundException
generato dal secondo metodo? Dovrei quindi buttarlo di nuovo, come conIOException
? Come funziona esattamente il messaggio (il parametro per l'eccezione)? È effettivamente utilizzabile in qualsiasi modo tranne la stampa? -
Se ho IOException (sostituisce il FNFE, posso ancora lanciare il FNFE quindi catturare prima FNFE e IOE in secondo luogo?)