Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从异常部分重构公共代码_Java_Refactoring - Fatal编程技术网

Java 从异常部分重构公共代码

Java 从异常部分重构公共代码,java,refactoring,Java,Refactoring,我有下面的代码和重复的代码,所以我做了一些错误的事情,必须有更好的方法做到这一点。我在catch部分有一组通用语句。我不能把它放在finally块中,因为这些都是为异常场景而做的。除了使用单独的方法保存此代码之外,我还可以采取其他方法吗 public MyResponseDto doSomeWork(MyRequestDto) { .... String jsonStr = null; try { jsonStr = new ObjectMapper().writeValue

我有下面的代码和重复的代码,所以我做了一些错误的事情,必须有更好的方法做到这一点。我在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 ;

}
这就是如何在一个
catch
中捕获多个异常。剩下的你可以试试,希望对你有帮助。当然,您可以在一次捕获中放置两个以上的异常

编辑:请注意,这只适用于Java7或更高版本

这就是如何在一个
catch
中捕获多个异常。剩下的你可以试试,希望对你有帮助。当然,您可以在一次捕获中放置两个以上的异常


编辑:请注意,这只适用于Java 7或更高版本

如果您使用Java 7,则可以使用try multi-catch

如果您使用的是Java 7,则可以使用try multi-catch

我相信OP没有要求<7个解决方案..?不知道你的意思。。multicatch特性是从Java7开始的。在回答中提到这一点会让问题更清楚。我编辑了答案。我知道它很有用,但另一方面,当有人建议使用泛型时,他们通常不会提到它只适用于Java5或更高版本,对吗?:)一般来说,一个catch中的异常不能在同一个继承树中,所以不能。IOException必须在单独的catch中,并且必须在其他两个catch之后,否则您将gt一个编译器错误是的,它将:)特别是因为您处理它们都是相同的,所以不需要知道哪个特定的异常被抛出我相信OP不要求<7个解决方案..?不确定您的意思。。multicatch特性是从Java7开始的。在回答中提到这一点会让问题更清楚。我编辑了答案。我知道它很有用,但另一方面,当有人建议使用泛型时,他们通常不会提到它只适用于Java5或更高版本,对吗?:)一般来说,一个catch中的异常不能在同一个继承树中,所以不能。IOException必须在单独的catch中,并且必须在其他两个catch之后,否则您将gt一个编译器错误Yes it will:)特别是因为您处理它们都是相同的,所以不需要知道哪个特定的异常是通过多重异常捕获的?无论如何,创建一个方法有什么不对?多异常捕获?无论如何,制定一个方法有什么不对?
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 ;
}