The javadoc example如何使用Google Guava的Throwables.propagateIfInstanceOf()?
try {
someMethodThatCouldThrowAnything();
} catch (IKnowWhatToDoWithThisException e) {
handle(e);
} catch (Throwable t) {
Throwables.propagateIfInstanceOf(t, IOException.class);
Throwables.propagateIfInstanceOf(t, SQLException.class);
throw Throwables.propagate(t);
}
也不是很具体的。真正的程序将如何?我真的不明白方法Throwables.propagateIfInstanceOf(Throwable, Class)
,propagate()
,propagateIfPossible()
的目的。我什么时候使用它们?
你写的方法的第二个版本不是等价的......你需要添加两个'catch'块来重新抛出异常......一个用于'RuntimeException'和一个用于' Error'。如果Throwables.propagate不是未经检查的异常,则Throwables.propagate只会将该throwable包装在“RuntimeException”中。 – ColinD 2011-02-23 14:37:58
我还是不会动心的。为什么我想要捕捉一个异常,如果我想传播它呢?我可以这样做:public void doSomething()throws IOException,SQLException {try {someMethodThatCouldThrowAnything(); catch(IKnowWhatToDoWithThisException e){handle(e); }}。这不是一个真正的例子... – 2011-02-25 01:55:57
@Jeny:你不能这样做是'someMethodThatCouldThrowAnything()'可以抛出一些除了'IOException'和'SQLException'以外的检查异常。 – axtavt 2011-02-25 09:19:09