domanda originale è hereutilizzo corretto del IllegalArgumentException
Sto leggendo in un file UTF-8 e l'analisi del contenuto di quel file. Se c'è un errore nel file non ha senso continuare e l'esecuzione dovrebbe fermarsi. Mi è stato suggerito di lanciare IllegalArgumentException
se ci sono problemi con i contenuti, ma la documentazione delle API dice:
gettato per indicare che un metodo è stato passato un argomento illegale o inappropriato.
Nel mio codice, l'argomento sarebbe il file (o in realtà il percorso) che mi passa, è corretto gettare IllegalArgumentException
in caso qualcosa vada storto durante l'analisi? In caso contrario, quale tipo di eccezione dovrei lanciare?
private char[][] readMazeFromFile(Path mazeFile) throws IOException {
if (!Files.isRegularFile(mazeFile) || !Files.isReadable(mazeFile)) {
throw new IllegalArgumentException("Cannot locate readable file " + mazeFile);
}
List<String> stringList = Files.readAllLines(mazeFile, StandardCharsets.UTF_8);
char[][] charMaze = new char[stringList.size()][];
for (int i = 0; i < stringList.size(); i++) {
String line = stringList.get(i);
if (line.length() != charMaze.length)
throw new IllegalArgumentException(String.format("Expect the maze to be square, but line %d is not %d characters long", line.length(), charMaze.length));
if (line.contains("B")) {
startX = i;
startY = line.indexOf("B");
}
if (line.contains("F")) {
endX = i;
endY = line.indexOf("F");
}
charMaze[i] = line.toCharArray();
}
if (startX == -1 || startY == -1)
throw new IllegalArgumentException("Could not find starting point (B), aborting.");
if (endX == -1 || endY == -1)
throw new IllegalArgumentException("Could not find ending point (F), aborting.");
return charMaze;
}
No in questi casi non si dovrebbe lanciare un IllegalArgumentException. Forse un'eccezione personalizzata come MazeParseException (come SAXException quando si utilizza DocumentBuilder.parse()). Utilizzare IllegalArgumentExceptions quando non si desidera accettare i valori nulli ma è stato fornito un valore nullo o se è richiesta una cartella ma è stato fornito un file, ecc. – Icewind
Direi che questa domanda è tendenzialmente basata principalmente sull'opinione. Personalmente non mi preoccuperei di creare una nuova classe di eccezioni in questo caso, mi limiterei a lanciare un 'RuntimeException' con un messaggio di errore appropriato. – JonK
IllegalArgumentException va perfettamente bene qui. L'oggetto Path non soddisfa i requisiti del metodo. –