我试图了解异常条件的来源。我的问题在最后,但我将举一个可能更清楚的例子。
以这个 Java 代码为例。它具有文件的路径并设置了一个File
对象。如果路径为空,则抛出异常。
String path = getPathName();
try {
File file = new File(path);
} catch (NullPointerException e) {
// ...
}
不过,这几乎不是一个例外情况,如果我们可以修改它以使其更可取:
String path = getPathName();
if (path == null) {
path = DEFAULT_PATH;
}
File file = new File(path); # we've removed the need for an exception
但更进一步,当我们尝试使File
可读性更好时,我们遇到了一个新的异常。
try {
file.setReadable(true);
} catch (SecurityException e) {
// ...
}
我们可以通过检查两个条件来绕过这个问题:
SecurityManager sm = System.getSecurityManager();
if (sm != null && sm.checkWrite(path)) {
// modify the SecurityManager
} else {
file.setReadable(true);
}
考虑到这个例子,关于我的问题......
如果我们向下移动堆栈,从 Java 到 OS 等,是否可以用 if-else 分支替换所有异常处理代码?或者是否有一些异常(硬件?)的根本原因意味着它们被“烘焙”到编程中?