"duck an exception" 是什么意思?
What does "duck an exception" mean?
在 Java™ 教程的 Advantages of Exceptions 部分:
A method can duck any exceptions thrown within it, thereby allowing a method farther up the call stack to catch it.
[...]
...ducking an exception requires some effort on the part of the middleman methods. Any checked exceptions that can be thrown within a method must be specified in its throws
clause.
这里的"duck an exception"是什么意思?我搜索了网络和 FOLDOC(免费在线计算词典),但没有找到任何看起来有希望的内容。
我认为这意味着一个方法可以捕获异常并重新抛出它以供其他方法捕获它并根据需要进行处理。或者只是抛出一个新的异常。或者避免捕获异常并让它在调用堆栈中冒泡。关键是要有一个方法将异常处理委托给其他可能更适合处理给定异常的方法(例如,通过访问必要的数据and/or状态)。但是(对于 java
)这需要始终使用 throws
子句声明方法,这很容易成为样板文件
如@jmcg 的评论所述,字面意思是“DUCK 只是为了避免被击中或被看见而低下头”(就像鸭子在河里所做的那样)
到"duck an exception"表示"not handle the exception"。这实际上解释了名称:to duck 意味着 "To evade; dodge"。
回避异常的方法根本不处理它(因为,例如,这不是它的目的)并让异常抛给调用方法。
例如,考虑一种方法,其目的是计算文件中的行数。这将是一个简单的实现 (Java 8):
private static long numberOfLines(Path path) throws IOException {
try (BufferedReader br = Files.newBufferedReader(path)) {
return br.lines().count();
}
}
请注意,此方法不处理 Files.newBufferedReader(path)
抛出的 IOException
,因为这不是方法目标。它躲避并让调用者适当地处理它。
注意调用者也可能回避异常并让它的调用者处理它,等等
嗯,闪避就是低下头以避免被击中或被看见。在这种情况下,'duck an exception' 只是意味着避免您的代码被异常击中。
为了您的方法不被异常击中,您通过在您的方法
上声明一个throws
异常将它抛到调用堆栈的更上层
public void myMethod() throws IOException {
}
不躲就得catch
它:
public void myMethod() {
try {
// ...
} catch(IOException e) {
// handle exception
}
我认为回避意味着重新抛出异常...换句话说,忽略它希望其他人会处理它:)
在 Java™ 教程的 Advantages of Exceptions 部分:
A method can duck any exceptions thrown within it, thereby allowing a method farther up the call stack to catch it.
[...]
...ducking an exception requires some effort on the part of the middleman methods. Any checked exceptions that can be thrown within a method must be specified in its
throws
clause.
这里的"duck an exception"是什么意思?我搜索了网络和 FOLDOC(免费在线计算词典),但没有找到任何看起来有希望的内容。
我认为这意味着一个方法可以捕获异常并重新抛出它以供其他方法捕获它并根据需要进行处理。或者只是抛出一个新的异常。或者避免捕获异常并让它在调用堆栈中冒泡。关键是要有一个方法将异常处理委托给其他可能更适合处理给定异常的方法(例如,通过访问必要的数据and/or状态)。但是(对于 java
)这需要始终使用 throws
子句声明方法,这很容易成为样板文件
如@jmcg 的评论所述,字面意思是“DUCK 只是为了避免被击中或被看见而低下头”(就像鸭子在河里所做的那样)
到"duck an exception"表示"not handle the exception"。这实际上解释了名称:to duck 意味着 "To evade; dodge"。
回避异常的方法根本不处理它(因为,例如,这不是它的目的)并让异常抛给调用方法。
例如,考虑一种方法,其目的是计算文件中的行数。这将是一个简单的实现 (Java 8):
private static long numberOfLines(Path path) throws IOException {
try (BufferedReader br = Files.newBufferedReader(path)) {
return br.lines().count();
}
}
请注意,此方法不处理 Files.newBufferedReader(path)
抛出的 IOException
,因为这不是方法目标。它躲避并让调用者适当地处理它。
注意调用者也可能回避异常并让它的调用者处理它,等等
嗯,闪避就是低下头以避免被击中或被看见。在这种情况下,'duck an exception' 只是意味着避免您的代码被异常击中。
为了您的方法不被异常击中,您通过在您的方法
上声明一个throws
异常将它抛到调用堆栈的更上层
public void myMethod() throws IOException {
}
不躲就得catch
它:
public void myMethod() {
try {
// ...
} catch(IOException e) {
// handle exception
}
我认为回避意味着重新抛出异常...换句话说,忽略它希望其他人会处理它:)