JAVA处理catch块中的死代码(通过应用程序逻辑)

JAVA处理catch块中的死代码(通过应用程序逻辑),java,exception,dead-code,Java,Exception,Dead Code,我有下面的代码 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 m

我有下面的代码

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
}
有没有更好的方法来处理死鱼?“file”变量由资源管理器加载,该资源管理器已处理未找到文件的情况(通过引发异常本身)。这是“死代码”,只是因为应用程序逻辑,如果不是由管理者进行检查,这就不是“死代码”

我可以想到的另一种方法是创建一个定制的DeadCodeException()(扩展RuntimeException()),并在出现类似这样的情况时抛出它。这不会导致“资源”上出现NullPointerException(),以防将来管理器逻辑发生更改

我如何使用好的代码标准来处理这种情况

编辑:

谢谢大家。显然我在这里犯了个错误。正如@generausBadger和@RandomCoder_01所指出的,IOExceptionI()不是FileNotFoundException(),因此在正确(错误?)的情况下仍然可以抛出它


我将在类似的情况下使用AssertionError(),对于这一个,我必须处理异常。

编译器没有您知道的那么多。它无法知道您已经检查了该文件是否存在(当然,在检查是否存在和使用之间可以删除该文件)

您应该向编译器(和读者)指出,如果您达到了这一点,事情就真的坏了。这样做的标准方法如下:

} catch (IOException e) {
    throw new AssertionError("Should not reach here, already checked for existence!", e);
}

抛出新的断言错误(“不可能,因为…”,e)
所有类型的问题都可能导致IOException:检查后文件被删除,某些硬件问题实际上导致问题,或者您正在使用文件共享且网络断开连接。FileNotFoundException!=例外。那么,你的例子真的是“死代码”吗?跨站点复制:你是对的,我没有想到这一点。我的管理器只使用file.exists()检查文件是否存在,因此仍然可以实际引发异常。谢谢大家。