在 Java 6 中模拟 try-with-resources 的最佳方法是什么?

2023-11-21

事实证明,几乎没有人能正确关闭 Java 中的资源。程序员要么不使用try-finally完全阻止,或者只是放resource.close() in finally这也是不正确的(因为Throwable from close()可以阴影Throwable来自 try 块)。有时他们会放一些类似的东西IOUtils.closeQuietly()with 仅适用于InputStream,但不适合OutputStream. try-with-resources解决了所有这些问题,但仍然有大量的项目是用 Java 6 编写的。

最好的模仿方法是什么try-with-resources在 Java 6 中?现在我用番石榴更近,这比什么都没有好,但仍然丑陋得多try-with-resources。另外,还有一种称为贷款模式的模式,但 Java 中缺少 lambda 表达式使得这种模式非常麻烦。有没有更好的办法?


我找到了一个很好的替代品try-with-resources。它用Lombok带注释处理的库:

 @Cleanup InputStream in = new FileInputStream(args[0]);
 @Cleanup OutputStream out = new FileOutputStream(args[1]);
 byte[] b = new byte[10000];
 while (true) {
   int r = in.read(b);
   if (r == -1) break;
   out.write(b, 0, r);
 }

但是,它不能正确处理异常。这个 bug 已经存在 1 年多了,仍然没有关闭:https://code.google.com/p/projectlombok/issues/detail?id=384

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Java 6 中模拟 try-with-resources 的最佳方法是什么? 的相关文章

  • 多线程以原子方式对大量值求和

    我正在开发一个应用程序 其中有大量线程 并且必须自动添加 100 个值 我在用AtomicLong效果很好 但仍需要提高性能 有没有比 AtomicLong 提供更好性能的东西 您可以使用长加法器 https docs oracle com
  • 我的应用程序中的 google+ 集成

    我是 Android 开发新手 正在创建一个带有 Google 集成的 Android 应用程序 我看到了一个教程并开始遵循它 但自教程以来 Google 已经更新了 Google 集成 例如 在本教程中您曾经单击 获取配置文件 按钮htt
  • 限制执行第三方软件的线程的权限

    我正在开发一个基于 Eclipse 的应用程序 能够执行第三方组件 不是 eclipse plugin 每个组件都有一个列出权限 以及相应动机 的自定义描述符 这样最终用户可以决定是否执行它 组件在单独的线程中执行 如何根据描述符限制这些线
  • 如何选择主题与队列

    当我们设计应用程序时如何选择Topic Queue类型实现 我知道 a 如果有多个消费者使用该消息 则使用 Topicb 如果只有一个消费者则使用Queue 请提供更多需要考虑的点 比如并发 消息持久化 负载均衡等等 Thanks Rw 如
  • 单击按钮时更改照片

    import javax swing Icon import javax swing ImageIcon public class Stage1 extends javax swing JFrame int score 0 int iter
  • 在Java中,为什么equals()和hashCode()必须一致?

    如果我重写类上的任一方法 它必须确保如果A equals B true then A hashCode B hashCode也一定是真的 有人可以给我看一个简单的例子 如果违反了这一点 就会导致问题吗 我认为这与您是否使用该类作为 Hash
  • Linux 上的 JavaFX

    Linux x86 和 x64 上的 JavaFX 情况如何 JavaFX 应用程序可以在 Linux 操作系统上顺利执行吗 我发现了 2011 年和 2012 年的一些问题 当时应用程序不稳定 目前发布的 JFX 版本是 2 2 4 在
  • 使用 Hibernate/Spring 生成数据库更新脚本

    我有一个项目 我们过去依赖 hibernate 来更新数据库 hibernate hbm2ddl auto update 即使在产品上 我正在将其迁移为使用 liquibase 我唯一担心的是 并不是我的团队中的每个人都是 sql 专家 因
  • Spring Data JPA 规范继承

    我有三个实体 如下所示 Entity Inheritance strategy InheritanceType JOINED DiscriminatorColumn name type public abstract class Emplo
  • Run As JUnit 未出现在 Eclipse 中 - 使用 JUnit4

    我正在尝试为我的 Web 应用程序编写 JUnit4 测试 它们之前一直工作正常 但是 现在当我尝试通过右键单击类文件 gt Run As gt JUnit Test 来运行测试时 我看不到该选项 我认为这可能是因为一位同事意外提交了一些
  • 面临 process.start(); 的问题在 Android 棒棒糖中

    面临一个问题process start 在 Android 棒棒糖中 我在服务中遇到了 android lollipop 后台进程的问题 我的代码在 KitKat 之前工作正常 我有一个ProcessBuilder pBuilder并向其中
  • 为什么 (Oracle) JVM 对内存使用有固定上限 (-Xmx)?

    本着提问的精神Java 为什么存在 MaxPermSize https stackoverflow com questions 3356005 java why does maxpermsize exist 我想问一下为什么Oracle J
  • NoSuchMethodError:org.springframework.data.repository.config.RepositoryConfigurationSource.getAttribute

    我正在尝试在 spring boot 应用程序中使用 spring data redis 来使用 redis 我正在创造JedisConnectionFactory如下 RedisStandaloneConfiguration config
  • 如何显示 javadoc 代码块中的泛型?

    我有一个 javadoc 代码块 我想在其中编写一个包含泛型的代码示例 如下所示 public interface SomeInterface
  • 在同步子句中抛出异常的副作用?

    从同步子句中抛出异常是否有任何不清楚的副作用 锁会发生什么情况 private void doSomething throws Exception synchronized lock doSomething 我没有看到任何副作用 The 锁
  • 控制台中的 Java msg - 两个方法具有相同的方法签名但不提供可分配的类?

    在迁移到 java 1 8 时 我升级了项目中的许多依赖项 它是基于spring 4 3的应用程序 有很多外部依赖 例如 JMS HTTP客户端 FTP XML等 当应用程序启动时 我现在在控制台中收到以下消息 两个方法具有相同的方法签名但
  • Java中有没有办法随机获取HashMap的值?

    Java中有没有办法随机获取HashMap的值 这有效 Random generator new Random Object values myHashMap values toArray Object randomValue values
  • 在 Ubuntu 上的 Tomcat 中加载共享本机库

    如何在 Ubuntu 上的 Tomcat6 中加载共享库 我创建了一个名为 libawragrids so 的库 awragrids 并将其放置在 var lib tomcat6 shared 我在调用启动 tomcat 的终端中设置了以下
  • GridLayout 中的 JLabel

    如何添加JLabel出于GridLayout 我有一个 8x8 网格布局 Container content getContentPane content setLayout new GridLayout 8 8 2 2 for int f
  • Tomcat 中 JNDI 的 Java Mail API 配置文档

    我花了几天时间弄清楚如何通过 JNDI 在 Tomcat 中配置 javax mail Session有认证 现在我明白了 但只是在深入研究代码之后 这次我看到了有史以来最糟糕的代码 javax mail Service connect S

随机推荐