findbug 与 RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT 的奇怪行为

Strange behaviour of findbug with RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT

提问人:Wizzard 提问时间:3/28/2019 最后编辑:Vadim KotovWizzard 更新时间:7/8/2021 访问量:3340

问:

我有 findebug,它可以检查在一种情况下找到错误,而在另一种情况下不查找错误,我完全不明白它是如何连接的。

所以我遇到了这个RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT并开始尝试不同的代码,并找到了修复此警告的变体,但它看起来与报告的问题完全无关。

此代码确实会生成RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT

        final Node currentProjectNode = TripleUtil.createNode(projectId);

        final ParameterizedSparqlString pQuery = new ParameterizedSparqlString();
        pQuery.setNsPrefix(TripleUtil.NS_PREFIX, TripleUtil.NS);

并且此代码不会生成错误

        final Node currentProjectNode = TripleUtil.createNode(projectId);
        final PrefixMappingImpl prefixMapping = new PrefixMappingImpl();
        prefixMapping.setNsPrefix(TripleUtil.NS_PREFIX, TripleUtil.NS);
        final ParameterizedSparqlString pQuery = new ParameterizedSparqlString();
        pQuery.setNsPrefix(TripleUtil.NS_PREFIX, TripleUtil.NS);

正如你所看到的,我只是实例化类,然后使用它的方法,仅此而已,我没有更改生成错误的代码,我没有更改生成错误的方法。看起来在第一个示例中 findbug 只是找不到正确的实现或其他东西,但我不明白为什么? 毕竟不应该报告,因为 前缀Mapping.setNs前缀 做一些工作,而不仅仅是返回价值。

Java Jena 发现错误 误报

评论


答:

0赞 Subhash Choudhary 7/8/2021 #1

当对函数的调用没有任何副作用时,如果忽略结果,进行调用有什么意义呢?在这种情况下,要么函数调用无用,应删除,要么源代码未按预期运行。

在设置 prefixMapping 的值后,需要执行某些操作。