如何将Java方法标记为“必须使用结果”以进行静态分析?

时间:2013-05-06 09:37:18

标签: java annotations static-analysis

使用GCC编译C或C ++时,可以使用属性((warn_unused_result))标记函数,如果调用返回某些内容的函数,则会导致编译器抱怨将它分配给任何东西。

我在开发的Java库中有一些方法有这样的方法 - 调用它们然后丢弃结果总是一个bug。我希望API用户能够通过静态分析识别这些错误,例如使用FindBugs或IntelliJ检查。

我想知道是否存在通常用于将方法或函数标记为“必须使用结果”的方法注释。 FindBugs为标准库提供了一些特殊的bug查找程序,但一般方法很有用。

3 个答案:

答案 0 :(得分:6)

完全有一个标准的注释,它是@CheckReturnValue。 FindBugs拥有它;见例如here

Guava在内部使用它 - 例如in the configuration methods for Splitter - 来自JSR 305

答案 1 :(得分:2)

使用

import javax.annotation.CheckReturnValue;
.
.
.
@CheckReturnValue

Google error-prone project wiki提供了一些@CheckReturnValue的好例子。 (如果你喜欢像FindBugs这样的静态分析工具,你一定要查看error-prone;它适用于源/ AST而不是字节码,这使它成为FindBugs等工具的补充。)

答案 2 :(得分:0)

如果您要在2019年或以后阅读本文,请使用@javax.annotation.CheckReturnValue中的com.github.spotbugs:spotbugs-annotations对该方法进行注释。 SpotBugs是FindBugs的积极维护者。