原始问题是here
我正在读取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;
}
最佳答案
我认为第一种用法是正确的:
if (!Files.isRegularFile(mazeFile) || !Files.isReadable(mazeFile)) {
throw new IllegalArgumentException("Cannot locate readable file "+mazeFile);
}
由于(如文档所述)提供了一个无效文件作为参数,因此应抛出
IllegalArgumentException
。一旦知道您拥有满足这些要求的实际文件,我个人认为这不是抛出异常的好方法。这将导致其他开发人员质疑给出的参数类型,而不是文件的内容。我想您的选择是:
为什么这是一个无效的论点。
java.text.ParseException
,因为正是文件解析导致了此错误。 MazeParseException
(根据评论)或FileFormatException
。 如果您期望其他几个开发人员执行您的功能,我希望第二个或第三个选择会更加有益。
关于java - 正确使用IllegalArgumentException,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23809672/