如何正确使用FindBugs的@CheckForNull,@ Nonull和@Nullable注释

前端之家收集整理的这篇文章主要介绍了如何正确使用FindBugs的@CheckForNull,@ Nonull和@Nullable注释前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想正式注释我的函数签名以澄清他们的契约 – 特别是如果允许或禁止null params和返回值 – 以FindBugs的静态代码分析工具(可能还有其他)可以使用它的方式.

有两个包(annotations.jar和jsr305.jar),每个包都有四个注释,以及不添加注释的选项.

解决方法

经过一些尝试后,这些是我的发现:

方法参数:

>参数不能为null:不要放任何注释.在这种情况下,如果将null传递给方法,则会出现错误标记. (我在预设@Nonnull注释时曾经预料到这种行为,但是当我把它放进去时,根本没有出现错误标记.)
>参数可以为null:放置@Nullable注释. (@CheckForNull的效果相同.@ Nullable documentation读取:“FindBugs会将带注释的项目视为没有注释.”这不是真的.如果我调用string.length()并且String字符串已被标记为@Nullable,它会导致出现错误标记,如果没有注释则没有显示错误标记.)

方法返回值:

>方法永远不会返回null:放置@Nonnull.如果您尝试返回null,则会导致错误标记;从方法内部.
>方法可以返回null:是否要强制检查它?如果返回值确实取决于只能在调用时可以假设的方法参数,则检查可能是开销,例如“如果参数1为负,则我的方法返回null”.在这种情况下我不会给出注释.但是,您可能需要考虑抛出IllegalArgumentException而不是返回null.
>方法可以返回null,并且应始终检查返回对象:放置@CheckForNull.但是,在许多情况下还有更好的方法,您可能需要考虑返回Collections.emptyList()而不是null列表,或抛出MissingResourceException,IOException或其他适当的异常.

要使用哪个JAR文件

>两个jar文件都会导致FindBugs的相同行为,唯一的区别是annotations.jar中的注释在Eclipse中显示为已弃用.所以使用jsr305.jar.
>需要jar文件.使用给定的包和类名创建空注释不起作用.你可以get it here.

猜你在找的Java相关文章