为什么Java不支持在finally抛出异常时从try/catch中检索丢失的异常?

2024-03-09

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

似乎仍然没有一种方法(据我所知)可以做相反的事情 - 当有一个显式的finally块并且抛出异常时,掩盖从try/catch抛出和挂起的异常。

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

该功能的实现似乎与中使用的类似getSuppressed()或链式异常,所提供的好处将非常有用,但它仍然被排除在每个版本之外。

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

(如果这个功能已经存在并且我只是一无所知,请提前道歉。)


镇压的事isn't仅限于尝试资源,并且您can自己将其用于类似的情况。例如,它is为其他情况提供。

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

但聪明的是,他们没有only让它成为可以在那里使用的东西。您可以自己使用它,通过Throwable#addSuppressed http://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html#addSuppressed-java.lang.Throwable-.

您可以在给出的伪代码示例中看到这一点JLS §14.20.3.1 http://docs.oracle.com/javase/specs/jls/se8/html/jls-14.html#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();
            }
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么Java不支持在finally抛出异常时从try/catch中检索丢失的异常? 的相关文章

  • 在 Java 中克隆对象 [3 个问题]

    这样做会调用Asub的clone方法吗 或者Asub深度克隆是否正确 如果没有的话 有没有办法通过这种方法对Asub进行深度克隆呢 abstract class Top extends TopMost protected Object cl
  • 如何通过 javaconfig 使用 SchedulerFactoryBean.schedulerContextAsMap

    我使用 Spring 4 0 并将项目从 xml 移至 java config 除了访问 Service scheduleService 带注释的类来自QuartzJobBean executeInternal 我必须让它工作的 xml 位
  • Java 枚举与创建位掩码和检查权限的混淆

    我想将此 c 权限模块移植到 java 但是当我无法将数值保存在数据库中然后将其转换为枚举表示形式时 我很困惑如何执行此操作 在 C 中 我创建一个如下所示的枚举 public enum ArticlePermission CanRead
  • .properties 中的通配符

    是否存在任何方法 我可以将通配符添加到属性文件中 并且具有所有含义 例如a b c d lalalala 或为所有以结尾的内容设置一个正则表达式a b c anything 普通的 Java 属性文件无法处理这个问题 不 请记住 它实际上是
  • HSQL - 识别打开连接的数量

    我正在使用嵌入式 HSQL 数据库服务器 有什么方法可以识别活动打开连接的数量吗 Yes SELECT COUNT FROM INFORMATION SCHEMA SYSTEM SESSIONS
  • Pig Udf 显示结果

    我是 Pig 的新手 我用 Java 编写了一个 udf 并且包含了一个 System out println 其中的声明 我必须知道在 Pig 中运行时该语句在哪里打印 假设你的UDF 扩展了 EvalFunc 您可以使用从返回的 Log
  • 如何在 Spring 中禁用使用 @Component 注释创建 bean?

    我的项目中有一些用于重构逻辑的通用接口 它看起来大约是这样的 public interface RefactorAwareEntryPoint default boolean doRefactor if EventLogService wa
  • CIL 'fault' 子句与 C# 中的 'catch' 子句有何不同?

    根据CLI标准 http www ecma international org publications files ECMA ST ECMA 335 pdf 第 IIA 部分 第 19 章 和 MSDN 参考页System Reflect
  • Java 公历日历更改时区

    我正在尝试设置 HOUR OF DAY 字段并更改 GregorianCalendar 日期对象的时区 GregorianCalendar date new GregorianCalendar TimeZone getTimeZone GM
  • 从最终实体获取根证书和中间证书

    作为密码学的菜鸟 我每天都会偶然发现一些简单的事情 今天只是那些日子之一 我想用 bouncy castle 库验证 java 中的 smime 消息 我想我几乎已经弄清楚了 但此时的问题是 PKIXparameters 对象的构建 假设我
  • 没有 Spring 的自定义 Prometheus 指标

    我需要为 Web 应用程序提供自定义指标 问题是我不能使用 Spring 但我必须使用 jax rs 端点 要求非常简单 想象一下 您有一个包含键值对的映射 其中键是指标名称 值是一个简单的整数 它是一个计数器 代码会是这样的 public
  • Hibernate 的 PersistentSet 不使用 hashCode/equals 的自定义实现

    所以我有一本实体书 public class Book private String id private String name private String description private Image coverImage pr
  • 内部类的构造函数引用在运行时失败并出现VerifyError

    我正在使用 lambda 为内部类构造函数创建供应商ctx gt new SpectatorSwitcher ctx IntelliJ建议我将其更改为SpectatorSwitcher new反而 SpectatorSwitcher 是我正
  • 如何在用户输入数据后重新运行java代码

    嘿 我有一个基本的java 应用程序 显示人们是成年人还是青少年等 我从java开始 在用户输入年龄和字符串后我找不到如何制作它它们被归类为 我希望它重新运行整个过程 以便其他人可以尝试 的节目 我一直在考虑做一个循环 但这对我来说没有用
  • tomcat 中受密码保护的应用程序

    我正在使用 JSP Servlet 开发一个Web应用程序 并且我使用了Tomcat 7 0 33 as a web container 所以我的要求是tomcat中的每个应用程序都会password像受保护的manager applica
  • 关键字“table”附近的语法不正确,无法提取结果集

    我使用 SQL Server 创建了一个项目 其中包含以下文件 UserDAO java public class UserDAO private static SessionFactory sessionFactory static se
  • 如何使用 jUnit 将测试用例添加到套件中?

    我有 2 个测试类 都扩展了TestCase 每个类都包含一堆针对我的程序运行的单独测试 如何将这两个类 以及它们拥有的所有测试 作为同一套件的一部分执行 我正在使用 jUnit 4 8 在 jUnit4 中你有这样的东西 RunWith
  • 干净构建 Java 命令行

    我正在使用命令行编译使用 eclipse 编写的项目 如下所示 javac file java 然后运行 java file args here 我将如何运行干净的构建或编译 每当我重新编译时 除非删除所有内容 否则更改不会受到影响 cla
  • 使用 CXF-RS 组件时,为什么我们使用 而不是普通的

    作为后续这个问题 https stackoverflow com questions 20598199 对于如何正确使用CXF RS组件我还是有点困惑 我很困惑为什么我们需要
  • Spring Rest 和 Jsonp

    我正在尝试让我的 Spring Rest 控制器返回jsonp但我没有快乐 如果我想返回 json 但我有返回的要求 完全相同的代码可以正常工作jsonp我添加了一个转换器 我在网上找到了用于执行 jsonp 转换的源代码 我正在使用 Sp

随机推荐

  • 每次调用或打开页面时都会增加变量吗?

  • 如何使用 HTTPS 代理启动 VSCode chrome 调试器

    我之前曾在没有 SSL 代理的情况下从 VSCode 启动过 chrome 所以我猜这就是我问题的根源 这是我的 VSCode launch json 配置 name Launch Chrome request launch type pw
  • protege 中的自反属性

    This https ufile io rcv9m是我用 protege 5 创建的本体 如果我做cl1 and cl2不相交 那么本体是不一致的 但是如果我取消选中is friend of反身性的 本体论不再不一致 我的本体有什么问题吗
  • IIS7 应用程序请求路由 HTTPS

    我有一个反向代理 可将流量路由到我的应用程序服务器 我的公共网站有登录功能 通过 HTTPS 提供服务 SSL 证书仅安装在反向代理服务器中 我的应用服务器没有 SSL 证书 反向代理服务器中启用了 SSL 卸载 到目前为止效果很好 我可以
  • 如果 Task Runner Explorer 任务失败则取消构建

    我正在使用 Visual Studio 任务运行程序 2015 来运行绑定到构建之前的 Gulp 任务 我已经将其设置为当 gulp 任务失败时 它会发送退出代码 1 并在最后显示 进程以代码 1 终止 然而构建仍在继续 这将取消团队城市中
  • 如何在 Perforce 2013 之前将搁置的变更列表取消搁置到另一个分支?

    Using Perforce 服务器 2012 2 538478 如何将文件从主干取消搁置到另一个分支 当尝试这样做时 我得到 filename not mapped to your workspace view 在 Perforce 20
  • jdt.core Java 模型的 JUnit 测试

    我正在尝试为我的代码进行一些 JUnit 测试 但问题是 我使用了 ICompilationUnit IPackageFragment ITypes 等 Java 模型 我不知道如何创建一些 ICompilationUnit 然后进行测试
  • 如何在由空格分隔的字符串的中点添加换行符

    使用 php 如何在字符串相对中间的空白处插入换行符 或者换句话说 如何计算句子中的单词数 然后在句子的中间点换行 这个想法是为了避免博客文章标题第二行出现寡妇 废弃的单词 方法是将每个标题切成两半 如果标题占用一行以上 则将其放在两行上
  • C# 中反射的 SetValue

    考虑这段代码 var future new Future future GetType GetProperty info Name SetValue future converted 在上面的代码中 我们应该传递两个参数SetValue 首
  • SceneKit - 如何获取 .dae 模型的动画?

    好吧 我在这里使用 ARKit 和 SceneKit 我在查看其他涉及 SceneKit 试图在其中建立模型的问题时遇到了麻烦 dae格式化并加载各种动画以使该模型运行 现在我们在 iOS11 中似乎某些解决方案不起作用 这是我从基地获取模
  • Haskell 中是否执行单子法则?

    来自 Haskell 维基 Monad 可以被视为各种标准编程接口 数据或控制结构 由 Monad 类捕获 全部 常见的单子是它的成员 class Monad m where gt gt m a gt a gt m b gt m b gt
  • 如何处理Matlab parfor循环中的未分类变量?

    我有以下代码 我想使其并行 但不幸的是 当我使用 parfor 循环时 出现以下错误 这是代码 parfor l1 1 length lambda1 list over l1 for l2 1 length lambda2 list par
  • Chrome SVG 网络字体在选择输入中出现奇怪的字符

    Windows 8 上的 Chrome 26 0 1410 64m 在渲染 WebFonts 时出现问题 这是一个已知问题 解决方案是首先提供字体的 svg 版本而不是 woff 版本 它修复了抗锯齿并使字体看起来再次漂亮 此方法的缺点是选
  • Safari iOS 12.2 和 12.3 中的错误

    所以我刚才在做个人项目时注意到了一些奇怪的事情 以下代码将导致位置问题div如果手机在方向之间来回切换 则元素处于纵向模式 而不是div如果固定或与屏幕底部齐平 div 将漂浮在屏幕上方并且根本不接触屏幕底部 html width 100
  • Java 中的泛型和反射

    这可能是一个非常基本的问题 但我对 Java 中的泛型确实很陌生 而且我很难改变我的思维过程与 C 中的完成方式 所以请耐心等待 我正在尝试用 Java 构建一个通用存储库 我创建了一个 IRepository 界面 如下所示 public
  • 在asp.net中使用表单身份验证时,是否可以使用iis 7来管理用户

    我有一个使用表单身份验证的 ASP NET Web 应用程序 一切都已配置并正常工作 但是 我正在处理创建和维护用户和角色成员资格的问题 我知道我可以推出自己的解决方案 但我想知道是否有替代解决方案 iis7 是否提供用于管理表单身份验证用
  • 如何使用 WinAPI 锁定内存中的页面?

    我需要防止应用程序的内存页面在 Windows 上从 RAM 中换出 是否有与 POSIX 等效的 WinAPI 函数mlockall http opengroup org onlinepubs 007908799 xsh mlockall
  • Erlang中socket的“packet”选项怎么能如此加速tcp传输呢?

    使用 packet 4 通过本地主机上的两个不同端口传输1G数据只需要8秒 而使用 packet raw 则无法在30秒内完成相同的任务 我知道如果使用后一种方法 数据将以数万个小块的形式到达 在archlinux上大小为1460字节 我已
  • 检查文件是否包含字符串

    所以我在这里找到了这个问题 但我对输出以及如何使用 if 语句处理它有疑问 这就是我所拥有的 但它总是说这是真的 即使文件中不存在监视器这个词 if File readlines testfile txt grep monitor do s
  • 为什么Java不支持在finally抛出异常时从try/catch中检索丢失的异常?

    在 Java 7 中 该功能被添加到 通过getSuppressed 获取从 try with resources 语句的隐式 finally 块抛出的异常 似乎仍然没有一种方法 据我所知 可以做相反的事情 当有一个显式的finally块并