当最终抛出异常时,为什么Java不支持从try / catch丢失的异常中检索异常?

更多

在Java 7中,该功能已添加到(通过getSuppressed())获取try-with-resources语句的隐式finally块引发的异常。

(据我所知)似乎还没有办法做相反的事情-当有一个明确的finally块并引发异常时,掩盖了从try / catch中引发和挂起的异常。

为什么Java不提供通过类似于的机制来获取这些隐藏/丢失的异常的功能getSuppressed()

看来,此功能的实现与在getSuppressed()异常或链接式异常中使用的实现类似,并且所提供的好处将非常有用,但在每个发行版中仍将其排除在外。

通过类似于以下方法的调用将这些被屏蔽的异常提供给程序员的危险是什么getSuppressed()

(如果已经存在此功能,请提前道歉,我很无知。)

TJ人群

抑制作用不仅限于尝试资源,您可以自己在类似情况下使用。例如,它为其他情况提供的。

try-with-resources将关闭资源的逻辑置于幕后,因此您无法直接访问自己的代码来处理过程中发生的任何异常。因此,他们添加了“抑制”功能,以便可以在幕后代码中使用它。

但是,他们巧妙地不仅使它可以在这里使用。您可以通过自己使用它Throwable#addSuppressed

您可以在JLS§14.20.3.1中提供的伪代码示例中看到此内容这是它的真实代码版本:

{
    SomeResource someResource = null;
    Throwable primaryException = null;

    try {
        someResource = /*...get the resource...*/;
        /*...do something...*/
    }
    catch (Throwable t) {
        primaryException = t;
        throw t;
    }
    finally {
        if (someResource != null) {
            if (primaryException != null) {
                // Dealing with a primary exception, close the resource
                // and suppress any exception resulting
                try {
                    someResource.close();
                }
                catch (Throwable suppressed) {
                    primaryException.addSuppressed(suppressed);
                }
            }
            else {
                // Not dealing with a primary exception, close the
                // resource without suppressing any resulting exception
                someResource.close();
            }
        }
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

不支持的字符抛出异常

来自分类Dev

为什么飞镖不支持声明的异常

来自分类Dev

为什么飞镖不支持声明的异常

来自分类Dev

为什么我不支持 IQueryable 异常?

来自分类Dev

在C#中传播在finally块中引发的异常而不会从catch块中丢失异常的最佳实践是什么?

来自分类Dev

在try / catch块中引发的异常(Java)

来自分类Dev

为什么在尝试添加标题栏附件视图时出现“此窗口样式不支持titlebarViewController”异常

来自分类Dev

为什么在使用SetPixel时出现异常:具有索引像素格式的图像不支持SetPixel?

来自分类Dev

为什么在尝试添加标题栏附件视图时出现“此窗口样式不支持titlebarViewController”异常

来自分类Dev

尝试使用try / catch InputMismatch异常并从数组中检索数据

来自分类Dev

在catch块中引发异常

来自分类Dev

catch块中的异常对象

来自分类Dev

为什么嵌入式C ++编译器不支持异常?

来自分类Dev

Swift中的try-catch异常

来自分类Dev

异常未捕获在try catch块中

来自分类Dev

try / catch块中未处理的异常

来自分类Dev

在 try/catch 块中未捕获异常

来自分类Dev

Java“最终”异常抛出规则

来自分类Dev

致命异常:java.lang.UnsupportedOperationException:不支持短信

来自分类Dev

Java丢失异常

来自分类Dev

为什么Java中不支持向后断言?

来自分类Dev

从Java中的异常处理e检索值

来自分类Dev

JavaScript异常在承诺链中丢失

来自分类Dev

JavaScript异常在承诺链中丢失

来自分类Dev

Java异常抛出对象并从catch中获取对象

来自分类Dev

Java异常抛出对象并从catch中获取对象

来自分类Dev

地址族不支持的异常重现

来自分类Dev

不支持的 SQL 功能异常

来自分类Dev

MongoDB 查找 | 异常 - 不支持

Related 相关文章

热门标签

归档