如何获取Eclipse中方法抛出的具体异常列表

时间:2014-01-21 04:01:11

标签: java eclipse exception-handling

是否可以获取方法可以抛出的具体异常的列表(并捕获)?

我正在调用使用异常层次结构的API,但只声明方法的顶级异常。我希望能够根据异常提供特定的行为,但我不想跟踪代码以找到可能抛出的具体异常。

可能会增加复杂性,API包含多个由接口分隔的层。

简单示例:

public interface MyInterface {
  void doShakyStuff() throws Exception;
}

public class MyImpl implements MyInterface {
  public void doShakyStuff() throws Exception{
    double rand = Math.random();
    if( rand > 0.1 ){
      throw new IOException();
    }
    if( rand > 0.5 ){
      throw new IllegalAccessException();
    }
    else{
      throw new InterruptedException();
    }
  }
}

我希望能够尽可能完整地创建以下try / catch,然后再进行调整:

public class MyClass{
  private MyInterface interface;

  public void doStuff(){
    try{
      interface.doShakyStuff();
    }catch(IOException e){
      // ...
    } catch( IllegalAccessException e){
      // ...
    } catch( InterruptedException e){
      // ...
    } catch(Exception e){
      // something else
    }
  }
}

2 个答案:

答案 0 :(得分:2)

答案是:不。

该方法声明它抛出的内容。如果它只是声明一个顶级异常(例如你的例子中的Exception)......那么那就是你所知道的所有IDE都会知道/告诉你要抓住它。

要查找它可能抛出的每个子类,您必须查看javadoc和/或代码以查找您感兴趣的抛出的子类或特定子类。

最终如果你正在使用一个抛出异常超类的API,并且有一些原因你需要知道具体的子类...它是一个设计糟糕的API。在编写API时抛出超类的意义在于,无论实际抛出哪个子类,都只需要一行逻辑来处理它。

答案 1 :(得分:1)

你也可以这样做。

try{
  interface.doShakyStuff();
}catch(Exception e){
     if(e instanceof IOException){
     }
     if( e instanceof IllegalAccessException ){
     }
     if( e instanceof InterruptedException ){
     } 
}