原題正確的用法是here的拋出:IllegalArgumentException
我在UTF-8的文件讀取和解析該文件的內容。如果文件中有錯誤,則無法繼續執行,應停止執行。我已建議拋出IllegalArgumentException
如果有問題與內容,但API文檔說:
拋出,表明一個方法已通過非法或不適當的 爭論。
在我的代碼中,參數將是我通過的文件(或者實際上是路徑),在解析時出現錯誤的情況下拋出IllegalArgumentException
是否正確?如果不是,我應該拋出什麼類型的異常?
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;
}
否在這種情況下,您不應該拋出IllegalArgumentException。也許像MazeParseException這樣的自定義異常(如使用DocumentBuilder.parse()時的SAXException)。使用IllegalArgumentExceptions當你不想接受空值,但給出空值,或者如果你需要一個文件夾,但給出了一個文件等。 – Icewind
我會說這個問題是主要基於意見的基礎上接近。我個人不會在這種情況下創建一個新的異常類,我只是拋出一個'RuntimeException'和一個適當的錯誤消息。 – JonK
IllegalArgumentException在這裏完全沒問題。 Path對象不符合該方法的要求。 –