原题正确的用法是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对象不符合该方法的要求。 –