重构一个方法,如果抛出某个异常,该方法 returns false

Refactoring a method which returns false if an some exception is thrown

我有这个方法,只有当列表中的所有项目 (List<Foo> foos) 没有异常发生时才 return 为真:

public boolean isHealthy(){
    try{
        for(final Foo myFoo : foos){
           checkConnection(myfoo);
        }
    }
    catch(DataAccessException | SQLException ex){
         return false;
    }
    return true;
} 

其中 checkConnection 是一个可以抛出异常的 void 方法

  void checkConnection(final Foo myFoo) throws SQLException{
      // ...
  }

我想重构 isHealthy 以使其更具可读性,因为 catch 块中的 return 看起来不太优雅,即使该方法只有 9 行,一开始也不明显看看它对嵌套的 try-for-catch 块做了什么。是否有一些 java 8 项功能(可选、流 ..)可以帮助他?

我将针对每个 Foo 包裹在 try-catch 中的连接检查委托给一个单独的方法,根据连接结果返回 boolean

boolean isConnected(final Foo myFoo) {
    try {
        checkConnection(myFoo);
        return true;
    } catch(DataAccessException | SQLException ex) {
        return false;
    }
}

void checkConnection(final Foo myFoo) throws SQLException {
    // ...
}

使用 Stream::allMatch 检查是否所有连接检查都是 true

,健康检查本身变得相当简单和可读
public boolean isHealthy(){
    List<Foo> foos = ...
    return foos.stream().allMatch(this::isConnected);
}