重构一个方法,如果抛出某个异常,该方法 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);
}
我有这个方法,只有当列表中的所有项目 (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);
}