Java中几种方法常见异常处理代码的提取

Java中几种方法常见异常处理代码的提取,java,exception-handling,Java,Exception Handling,我在一个类中有一些私有方法,它具有相同的异常处理。它们的主体代码引发相同的异常类型,并且代码处理是相同的 private void method1() { try { //make_the_world_a_better_place } catch(IOException ioe) { // ... } } private boolean method2(String str) { try { //make_a_cheesecake }

我在一个类中有一些私有方法,它具有相同的异常处理。它们的主体代码引发相同的异常类型,并且代码处理是相同的

private void method1() { try { //make_the_world_a_better_place } catch(IOException ioe) { // ... } } private boolean method2(String str) { try { //make_a_cheesecake } catch(IOException ioe) { // ... } } 私有void方法1(){ 试一试{ //让世界变得更美好 } 捕获(ioe异常ioe){ // ... } } 私有布尔方法2(字符串str){ 试一试{ //做一块奶酪蛋糕 } 捕获(ioe异常ioe){ // ... } } 哪种方法是将公共异常处理外部化的最佳方法,因此当我更改其中一个方法的异常处理代码时,更改将传播到其他方法?模板方法模式在这种情况下很方便,但我不想深入讨论类层次结构


编辑:这里有几个catch子句,而不是像示例中那样的一个。

你的直觉是好的-DRY是一件好事。但不要这样做。您的代码将更难阅读

确保您的catch块真的在处理异常,而不仅仅是吞下它。如果你的类没有提供修正,我认为最好扔掉它,让客户端知道该怎么做。

创建一个接口:

public interface Executor {

  void exec() throws Exception;

}

在你们班:

checkForExceptions(new Executor() {

  @Override
  public exex() throws Exception {

    method1();

  }

});

private void checkForExceptions(Executor ex) {
try {
  ex.exec();
} catch (Exception e) [
  /// handling
}

你可以创建一个他们都调用的
handleException(IOException ioe)
方法。

我在考虑在一个地方进行try-catch处理,以及它们之间的方法逻辑,但我想那时的世界太完美了。实际上,我在方法中有几个catch子句

是的,谢谢!您的解决方案是模板方法的面向对象替代方案。但我真的不想为这么简单的(?)任务引入新的类层次结构吗?是否可以在同一类中重用异常处理代码?我知道我需要使用匿名类,但无论如何都需要引入新的接口。如果有lambda(等待jdk7),你就不需要任何接口了。我在考虑在一个地方进行try-catch处理,以及它们之间的方法逻辑,但我想那时的世界太完美了。实际上,我在方法中有几个catch子句……我捕获不同的异常,并抛出带有不同消息的自定义运行时异常。如果这种情况在未来发生变化,会发生什么?无论如何,我的问题是一般性的,我很想知道如何在Java中做到这一点。我的方法是不抛出自定义异常,只是放弃原始异常,并在这里和那里避免大量捕获块。我试图避免方法抛出的检查异常。你能解释为什么吗?也许这是你不必担心的事情