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



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

我正在调用使用异常层次结构的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();
    }
  }
}

我希望能够尽可能地创建以下尝试/捕获,然后再调整:

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
    }
  }
}

答案是:no。

该方法声明其投掷。如果仅宣布顶级异常(即示例中的Exception)...那么,这就是您所有的IDE都知道/告诉您要抓住。

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

最终,如果您使用的是抛出异常超级类的API,并且有一些原因您需要知道混凝土子类...这是一个设计良好的API。写API时抛出超类的目的是,无论哪个子类真正被抛出,都只有一条逻辑可以处理。

您也可以执行此操作。

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

最新更新