gpt4 book ai didi

java - IntStream 什么时候真正关闭? SonarQube S2095 是 IntStream 的误报吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:56:58 25 4
gpt4 key购买 nike

我使用 Java 8 流代替许多旧式 for 循环来迭代一堆结果并生成摘要统计信息。例如:

int messages = IntStream.rangeClosed(0, 7).map(ids::get).reduce(Integer::sum).getAsInt();

注意:我知道还有其他方法可以进行上面显示的计数。我这样做是为了说明我的问题。

我正在使用带有 Java 3.9 插件的 SonarQube 5.3。在该配置中,上面的代码行违反了 squid 规则 S2095:“应关闭资源”。如果 AutoCloseable(例如 FileInputStream)已打开但从未关闭,这就是我希望看到的结果。

所以这是我的问题:终端操作 reduce 是否关闭流?应该是?或者这是鱿鱼规则中的误报?

最佳答案

它没有关闭,因为 AutoCloseable 接口(interface)只在 try-with-resources 中起作用。但是这个关闭操作对于 IntStream 来说是完全没有必要的,因为它在 AutoCloseable 接口(interface) javadoc 中说:

However, when using facilities such as java.util.stream.Stream that support both I/O-based and non-I/O-based forms, try-with-resources blocks are in general unnecessary when using non-I/O-based forms.

所以 S2095 是 IntStream 的误报。这将有望由 SONARJAVA-1478 修复

关于java - IntStream 什么时候真正关闭? SonarQube S2095 是 IntStream 的误报吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34768792/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com