问题标签 [try-with-resources]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
26074 浏览

java - 尝试资源的 8 个分支 - 可以进行 jacoco 覆盖吗?

我有一些使用资源尝试的代码,在 jacoco 中它只覆盖了一半。所有的源代码行都是绿色的,但我得到一个小黄色符号,告诉我只有 8 个分支中的 4 个被覆盖。

在此处输入图像描述

我无法弄清楚所有分支是什么,以及如何编写覆盖它们的代码。三个可能的地方扔PipelineException。这些是createStageList()processItem()隐含的close()

  1. 不抛出任何异常,
  2. 抛出异常createStageList()
  3. 抛出异常processItem()
  4. 抛出异常close()
  5. processItem()从和抛出异常close()

我想不出任何其他案例,但我仍然只覆盖了 8 个案例中的 4 个。

有人可以向我解释为什么它是 4 of 8 并且无论如何都要击中所有 8 个分支吗?我不擅长解密/阅读/解释字节码,但也许你是...... :) 我已经看过https://github.com/jacoco/jacoco/issues/82,但既不是它也不是问题它非常有帮助(除了指出这是由于编译器生成的块)

嗯,就在我写完这篇文章时,我想到了我上面提到的可能无法测试哪些情况......如果我做对了,我会发布一个答案。我相信这个问题及其答案无论如何都会对某人有所帮助。

编辑:不,我没有找到它。抛出 RuntimeExceptions(不由 catch 块处理)不再覆盖任何分支

0 投票
3 回答
1304 浏览

java - 强制 try-with-resources Java 7

我有一个实现 AutoCloseable 的类,旨在与 Java 7 的新 try-with-resources 构造一起使用。但是,我想不出一种方法来保证我班级的用户使用 try-with-resources。如果这不发生,那么我的班级将无法自行关闭,并且会发生不好的事情。有什么办法——语言结构或其他方式——来强制执行吗?甚至能够检测我是否在 try-with-resources 块中,这样如果不是的话我可以抛出异常(尽管编译时构造会更好)。

谢谢!

0 投票
2 回答
64006 浏览

java-7 - 我是否正确使用 Java 7 try-with-resources

如果抛出异常,我期望缓冲读取器和文件读取器关闭并释放资源。

但是,是否需要有一个catch成功关闭的条款?

编辑:

本质上,Java 7 中的上述代码是否等同于 Java 6 中的以下代码:

0 投票
7 回答
29002 浏览

java - try-with-resources 语句的目的是什么?

Java 7 有一个名为try-with-resources的新特性。它是什么?为什么我们应该使用它,在哪里使用它,我们可以在哪里利用这个特性?

try声明没有catch让我感到困惑的障碍。

0 投票
4 回答
2857 浏览

java - Java 隐式 try-with-resources

我想知道以下代码是否正确使用了 try-with-resources。

论据不重要,唯一重要的是:

  • new QueryBuilder().build();返回一个PreparedStatement

我完全明白这rs将被关闭,但也会PreparedStatement被关闭,如果是,是什么原因?因为ResultSet关闭还是因为资源尝试?

0 投票
3 回答
74 浏览

java - 关于 jls 的一点说明

直接来自这个jls

带有声明多个资源的 ResourceSpecification 子句的 try-with-resources 语句被视为多个 try-with-resources 语句,每个语句都有一个声明单个资源的 ResourceSpecification 子句。翻译具有 n 个资源 (n > 1) 的 try-with-resources 语句时,结果是具有 n-1 个资源的 try-with-resources 语句。经过n次这样的翻译,有n个嵌套的try-catch-finally语句,整体翻译完成。

对我来说,上面引用的声明的最后一部分非常清楚。如果我像他们所说的那样声明了 n 个资源,为什么the result is a try-with-resources statement with n-1 Resources

为什么不使用 n 资源?

提前致谢。

0 投票
1 回答
7557 浏览

java - Java Try With Resources 不适用于分配?

好的,所以我只是在编写一个快速课程,我尝试使用资源尝试而不是 try-catch-finally(讨厌这样做)方法,并且我不断收到错误“Illegal start of type”。然后我转向了关于它的 Java 教程部分:http://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html它表明您可以在括号中分配一个新变量。我不确定发生了什么。

0 投票
3 回答
1867 浏览

java - 为什么我们必须在 try-with-resource 块中声明和定义资源?

以上工作正常。但是当我这样做时

它抛出错误。为什么会这样?我正在测试这个新功能,我认为我会采用第二种方法,然后try-catch statement打印资源PrintWriter f- 如果 try-with-resource 语句按预期工作,它应该为空。为什么不允许第二种方式?

另外我如何通过方法1对其进行测试?

0 投票
3 回答
2289 浏览

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

事实证明,几乎没有人正确关闭 Java 中的资源。程序员要么根本不使用try-finally块,要么只是放入resource.close()也不finally正确的块(因为Throwable来自try 块的close()阴影)。Throwable有时他们把 with 之类的东西IOUtils.closeQuietly()只对 for InputStream,而不是 for OutputStreamtry-with-resources解决了所有这些问题,但仍有大量项目是用 Java 6 编写的。

try-with-resources在 Java 6中模拟的最佳方法是什么?现在我使用Guava Closer,它比没有好,但仍然比try-with-resources. 此外,还有一种称为贷款模式的模式,但 Java 中缺少 lambda 使得这种模式非常麻烦。有没有更好的办法?

0 投票
5 回答
15644 浏览

java - 在 Java 中对资源使用 try 时出错

我有这种方法,我正在尝试使用 Java SE 7 的资源。

finally我在块中收到编译错误,files cannot be resolved to a variable 我在try with block. 为什么我会收到此错误以及如何解决?

谢谢