从异常部分重构公共代码

时间:2014-11-19 17:01:36

标签: java refactoring

我有重复代码的代码,所以我做错了,必须有更好的方法。我在catch部分有一套共同的陈述。我不能把它放在finally块中,因为这些仅针对异常场景。除了制作单独的方法来保存此代码之外,还有其他方法可以采取吗?

public MyResponseDto doSomeWork(MyRequestDto) {
  ....
  String jsonStr = null;
  try {
    jsonStr = new ObjectMapper().writeValueAsString(MyRequestDto);
  } catch (JsonGenerationException e) {
    log.error(e.getMessage());
    myResponseDto .setWorkDone(false);
    myResponseDto .setErrorMessage(e.getMessage());
    return myResponseDto ;
  } catch (JsonMappingException e) {
    log.error(e.getMessage());
    myResponseDto .setWorkDone(false);
    myResponseDto .setErrorMessage(e.getMessage());
    return myResponseDto ;
  } catch (IOException e) {
    log.error(e.getMessage());
    myResponseDto .setWorkDone(false);
    myResponseDto .setErrorMessage(e.getMessage());
    return myResponseDto ;
  }

  myResponseDto = postWorkRequest(jsonStr);
  return myResponseDto ;

}

2 个答案:

答案 0 :(得分:4)

public MyResponseDto doSomeWork(MyRequestDto) {
  ....
  String jsonStr = null;
  try {
    jsonStr = new ObjectMapper().writeValueAsString(MyRequestDto);
  } catch (JsonGenerationException | JsonMappingException e) {
    log.error(e.getMessage());
    myResponseDto .setWorkDone(false);
    myResponseDto .setErrorMessage(e.getMessage());
    return myResponseDto ;
  } 
  myResponseDto = postWorkRequest(jsonStr);
  return myResponseDto ;
}

这是您在一个catch中捕获多个例外的方法。你可以尝试其余的,希望有所帮助。当然,你可以在一个捕获中放置2个以上的异常!

编辑:请注意,这仅适用于Java 7或更新版

答案 1 :(得分:2)

如果您使用的是Java 7,则可以使用try-multi catch。 https://docs.oracle.com/javase/7/docs/technotes/guides/language/catch-multiple.html