Bob*_*oss 10 java java-8 sonarqube
我使用Java 8流代替许多旧样式for循环来迭代一堆结果并生成摘要统计信息.例如:
int messages = IntStream.rangeClosed(0, 7).map(ids::get).reduce(Integer::sum).getAsInt();
Run Code Online (Sandbox Code Playgroud)
注意:我知道还有其他方法可以进行上面显示的计数.我这样做是为了说明我的问题.
我正在使用SonarQube 5.3和Java 3.9插件.在该配置中,上面的代码行违反了squid规则S2095:"资源应该被关闭".这是我期望看到AutoCloseable(例如,FileInputStream)被打开但从未关闭的结果.
所以这是我的问题:终端操作是否reduce关闭流?应该是?或者这是鱿鱼规则中的假阳性?
它没有关闭,因为AutoCloseable界面只在里面工作try-with-resources.但是这个关闭操作完全没必要,IntStream因为它在AutoCloseable界面中说javadoc:
但是,当使用支持基于I/O和非I/O的表单的java.util.stream.Stream等工具时,在使用非I/O时通常不需要try-with-resources块.基础表格.
所以是的, S2095 是 IntStream的误报.希望由SONARJAVA-1478修复
| 归档时间: |
|
| 查看次数: |
2001 次 |
| 最近记录: |