无法访问的Catch Block问题

时间:2014-03-16 04:43:10

标签: java exception unreachable-code

设置

所以我有两个例外:

ProfileException extends Exception
UserException extends Exception

我的一个帮助器类方法抛出这两个异常togeather:

  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. 现在我 NEED 必须区分方法抛出的这两个异常,并根据抛出的异常类型单独处理异常。
  2. 但是我收到以下错误。

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

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

3 个答案:

答案 0 :(得分:3)

此错误表示UserException扩展了ProfileException

答案 1 :(得分:1)

由于两个例外都在层次结构中处于同一级别,因此您必须使用以下

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

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

  }
}

答案 2 :(得分:0)

我确信UserException可能是extends ProfileException。如果您对其进行了修改,则IDE可能未编译最新版本(例如,因为发生了编译器错误)。因此,您可以运行clean和build命令(在大多数流行的IDE中都可用)。

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

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

然而,大多数IDE总会将特定类型的catch块写入更一般的类型,以防止此类死代码。