当前位置: 首页 > 面试题库 >

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

鲁华灿
2023-03-14
问题内容

事实证明,几乎没有人正确地关闭Java中的资源。程序员要么不使用try- finally在所有的块,或者只是把resource.close()finally,这也是不正确的(因为Throwableclose()可影子Throwable从try块)。有时他们用类似的字眼IOUtils.closeQuietly()仅是正确的InputStream,而不是正确的OutputStreamtry- with-resources解决了所有这些问题,但是仍然有大量用Java 6编写的项目。

try-with-resources在Java 6中进行仿真的最佳方法是什么?现在我用Guava
Closer
,它总比没有好,但比它更丑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);
 }

但是,它不能正确处理异常。该错误已有1年以上的历史,并且仍未关闭:https
:
//code.google.com/p/projectlombok/issues/detail?id=384



 类似资料:
  • 下面的try with resources语句是来自Java文档的示例 根据文件, 用资源尝试语句确保每个资源在语句末尾关闭。 我的问题是,为什么我需要在try关键字之后立即在括号内声明资源。(如上面的BuffereReader) BufferReader实现了java。lang.AutoCloseable 所以为什么不支持这样的事情, 一旦退出尝试,就隐式关闭资源对象。(正如它所实现的自动关闭)

  • 主要内容:Java SE 7:Try-With-Resources基础知识,Java SE 7:Try-With-Resources规则,Java SE 9:Try-With-Resources改进在这篇文章中,我们将讨论Java SE 9中的一些改进语句。现在让我们开始学习这个构造。 Java SE 7:Try-With-Resources基础知识 Java SE 7引入了一个新的构造: 语句,用于更好的异常处理。 如果没有这个构造,开发人员必须编写大量冗余和难看的代码。 如果开发人员忘记正确

  • 问题内容: 我读到try-with-resources 中的块是可选的。我试图在try-with- resources块中创建一个对象,没有后续块,只是从eclipse中获取编译器错误:“ 自动调用引发了未处理的异常类型。” 由于可以在try-with- resources中使用的每个资源都实现了,因此在调用该方法时可能会引发异常,因此我不明白该子句是可选的,因为它不允许我跳过从中捕获异常的过程。

  • 我读到try-with资源中的块是可选的。我尝试在try-with资源块中创建一个对象,没有后续的块,只是从eclipse中获取编译器错误:“由自动调用引发的未处理异常类型。” 由于每一个资源,可以使用在try与资源实现,因此潜在地抛出一个异常调用方法,我不明白如何子句是可选的,因为它不允许我跳过从捕获异常。 是否有一些特殊要求,即AutoCloseable的具体实现不直接声明其方法中抛出的任何异

  • 我想知道在try-with-resources块中放入return语句是否会阻止资源被自动关闭。 try-with-resources语句确保每个资源在语句结束时关闭。 如果由于return语句而始终无法到达语句的结尾,会发生什么情况?

  • 问题内容: 在Java中创建模拟对象的最佳框架是什么?为什么?每个框架的优缺点是什么? 问题答案: 我使用Mockito取得了成功。 当我尝试学习JMock和EasyMock时,我发现学习曲线有些陡峭(尽管也许就是我自己)。 我喜欢Mockito,因为它的语法简洁明了,我很快就能掌握。最小的语法旨在很好地支持常见情况,尽管几次我需要做一些更复杂的事情,但我发现我想要的东西是受支持的并且易于理解。