Java。处理 catch 块中的死代码(通过应用程序逻辑)
Java. Handle dead code (by application logic) in catch block
我有如下一段代码。
Path path = Paths.get(file.getAbsolutePath());
ByteArrayResource resource = null;
try {
resource = new ByteArrayResource(Files.readAllBytes(path));
} catch (IOException e) {
// DEAD CODE.
// file existance is checked by resource manager
}
有没有更好的方法来处理死捕获? “文件”变量由资源管理器加载,它已经处理了找不到文件的情况(通过自身抛出异常)。这是“死代码”只是因为应用程序逻辑,如果不是经理做检查,这就不是“死代码”。
我能想到的替代方法是创建一个自定义的 DeadCodeException()(扩展 RuntimeException())并在出现这种情况时抛出它。这不会在“资源”上导致 NullPointerException(),以防将来管理器逻辑发生变化。
如何使用良好的代码标准来处理这种情况?
编辑:
谢谢大家。显然我在这里犯了一个错误。正如@GenerousBadger 和@RandomCoder_01 所说,IOExceptionI() 不是 FileNotFoundException(),因此在正确(错误?)的情况下仍然可以抛出它。
我会在类似的情况下使用 AssertionError(),至于这个,我必须处理异常。
编译器没有你知道的那么多。它不知道您已经检查过文件是否存在(当然,文件可能会在检查存在和使用之间被删除)。
你应该向编译器(和读者)表明,如果你达到那个点,事情就真的坏了。执行此操作的标准方法如下:
} catch (IOException e) {
throw new AssertionError("Should not reach here, already checked for existence!", e);
}
我有如下一段代码。
Path path = Paths.get(file.getAbsolutePath());
ByteArrayResource resource = null;
try {
resource = new ByteArrayResource(Files.readAllBytes(path));
} catch (IOException e) {
// DEAD CODE.
// file existance is checked by resource manager
}
有没有更好的方法来处理死捕获? “文件”变量由资源管理器加载,它已经处理了找不到文件的情况(通过自身抛出异常)。这是“死代码”只是因为应用程序逻辑,如果不是经理做检查,这就不是“死代码”。
我能想到的替代方法是创建一个自定义的 DeadCodeException()(扩展 RuntimeException())并在出现这种情况时抛出它。这不会在“资源”上导致 NullPointerException(),以防将来管理器逻辑发生变化。
如何使用良好的代码标准来处理这种情况?
编辑:
谢谢大家。显然我在这里犯了一个错误。正如@GenerousBadger 和@RandomCoder_01 所说,IOExceptionI() 不是 FileNotFoundException(),因此在正确(错误?)的情况下仍然可以抛出它。
我会在类似的情况下使用 AssertionError(),至于这个,我必须处理异常。
编译器没有你知道的那么多。它不知道您已经检查过文件是否存在(当然,文件可能会在检查存在和使用之间被删除)。
你应该向编译器(和读者)表明,如果你达到那个点,事情就真的坏了。执行此操作的标准方法如下:
} catch (IOException e) {
throw new AssertionError("Should not reach here, already checked for existence!", e);
}