【问题标题】:Compiler complains with multiple Exception handling编译器抱怨多个异常处理
【发布时间】:2015-11-22 12:31:21
【问题描述】:

尝试使用时

catch( EntityExistsException | PersistenceException eeEx)

编译器抱怨:

不能抛出 Object 类型的异常;异常类型必须是 Throwable 的子类

我正在为项目使用编译器设置为 java 8 的 eclipse luna

【问题讨论】:

  • 给你看EntityExistsExceptionPersistenceException
  • 这确实是一个非常奇怪的错误。你也可以发布尝试部分吗?
  • @sᴜʀᴇsʜᴀᴛᴛᴀ 这些是 JPA 例外,每个都可以正常工作
  • @Tunaki 真的没什么特别的......相信我:)
  • 你的compliance level 是什么?至少应该是 Java 7。

标签: java eclipse exception


【解决方案1】:

我刚刚遇到了这个问题,这让我发疯了。
我正在通过将 URISyntaxException 添加到现有的 catch 来创建一个多捕获异常处理程序。
Eclipse 抱怨

不能抛出 Object 类型的异常;异常类型必须是 Throwable 的子类

我终于注意到我没有添加相应的import语句所以eclipse不知道新添加的异常的类型。
如果 eclipse 会抱怨就好了

URISyntaxException 无法解析为类型

这就是异常本身时所说的内容。
当它是 multi-catch 的一部分时,您得到的错误是不直观的。

【讨论】:

    【解决方案2】:

    听起来像是缺少的“扩展异常”之一。

    我觉得跟“多重异常处理”没什么关系,JDK8肯定会编译成那样的代码。

    这两个实际上是扩展异常/是可抛出的子项吗?

    【讨论】:

    • 好的。您能否验证它是您在运行时期望的实际类?它有可能在运行时被覆盖。对所有有问题的人使用 Class.forName,如果您在 eclipse 中开发 ctrl+shit+t 按该类型搜索以查看项目类路径中的匹配项。但是无论如何在运行时找到它的所有实例,即使按类型搜索仅显示 1 个位置。还有一件事,你能把通用的 Exception/RuntimeException 对象放在那里看它是否运行吗?如果是这样,那就是我上面所说的。
    【解决方案3】:

    在 Eclipse 中,只要确保在 catch 子句中导入所有异常

    catch(SomeException se | SomeException1 se1 | SomeException2 se2){
        doSomething();
    }
    

    缺少导入语句将显示如下错误。

    【讨论】:

      猜你喜欢
      • 2011-01-08
      • 2019-11-16
      • 1970-01-01
      • 1970-01-01
      • 2013-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-06
      相关资源
      最近更新 更多