java - 如何使用 Google Guava 的 Throwables.propagateIfInstanceOf()?

标签 java guava

The javadoc example

  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) , 传播(), 传播IfPossible()。我什么时候使用它们?

最佳答案

这些方法的目的是提供一种方便的方法来处理已检查的异常。

Throwables.propagate() 是将已检查异常包装到未检查异常中的常见用法的简写(以避免在方法的 throws 子句中声明它)。

Throwables.propagateIfInstanceOf() 用于在方法的 throws 子句中声明类型时按原样追溯已检查的异常。

换句话说,有问题的代码

public void doSomething() 
    throws IOException, SQLException {

    try {
        someMethodThatCouldThrowAnything();
    } catch (IKnowWhatToDoWithThisException e) {
        handle(e);
    } catch (Throwable t) {
        Throwables.propagateIfInstanceOf(t, IOException.class);
        Throwables.propagateIfInstanceOf(t, SQLException.class);
        throw Throwables.propagate(t);
    }  
}

是以下代码的简写:

public void doSomething() 
    throws IOException, SQLException {

    try {
        someMethodThatCouldThrowAnything();
    } catch (IKnowWhatToDoWithThisException e) {
        handle(e);
    } catch (SQLException ex) {
        throw ex;
    } catch (IOException ex) {
        throw ex;
    } catch (Throwable t) {
        throw new RuntimeException(t);
    }  
}

另请参阅:

关于java - 如何使用 Google Guava 的 Throwables.propagateIfInstanceOf()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5090417/

相关文章:

java - 在单个表达式中解包 Guava Optional

java - 尽管条目被删除,Guava CacheBuilder Cache RemovalListener onRemoval 不会每次都被调用

java - GitHub 文件夹中的 MySQL 数据库

java - 在 spring bean 中注入(inject) 2D int 数组

c# - 如何更好地减少类依赖性以便更容易对其进行单元测试

java - Iterable.filter() 可以跳过 "constant"(包括短路)谓词的处理吗?

java - 接口(interface)/枚举列出标准 mime 类型常量

java - 为什么网格上的线条末端超出了该网格的给定宽度和高度?

java - css 按钮图像未与 id 和样式类一起加载

JAVA Guava /集合: How to use a predefined list as a predicate to sort another list by?