1

设置

所以我有两个例外:

ProfileException extends Exception
UserException extends Exception

我的助手类方法之一将这两个异常一起抛出:

  Long getSomething() throes ProfileException, UserException

我在这样的 try catch 块中调用此方法。

try
{
   Long result = helperObj.getSomething();
}
catch(ProfileException pEx)
{
//Handle profile exception
}
catch(UserException uEx)
{
//Handle user exception
}

问题

  1. 现在我需要区分方法抛出的这两个异常,并根据抛出的异常类型分别处理异常。

但是我收到以下错误。

Unreachable catch block for UserException. It is already handled by the catch block for ProfileException.

如何根据 getSomething() 方法抛出的异常类型分别区分和处理?

4

3 回答 3

3

此错误表示 UserException 扩展 ProfileException

于 2014-03-16T04:50:21.037 回答
1

由于两个异常在层次结构中处于同一级别,因此您必须使用如下

try {
   Long result = helperObj.getSomething();
}
catch(Exception ex) {
  if (ex instanceOf ProfileException) {
      //Handle profile exception

  } else if (ex instanceOf UserException) {
     // Handle user exception

  }
}
于 2014-03-16T04:47:35.807 回答
0

我很相信这UserException可能extends ProfileException。如果你修改了它,很有可能 IDE 没有编译最新版本(例如因为发生编译器错误)。因此,您可以运行 clean and build 命令(在大多数流行的 IDE 中可用)。

catch您可以通过交换块来简单地解决问题:

try {
   Long result = helperObj.getSomething();
} catch(UserException uEx) {
    //Handle user exception
} catch(ProfileException pEx) {
    //Handle profile exception
}

然而,大多数 IDE 总是将catch块从特定类型写入更通用的类型,以防止此类死代码。

于 2014-03-16T04:51:30.240 回答