我在方法参数上使用了Findbugs和javax.annotation.Nonnull。
在私有方法中,我通常添加一个断言行来检查空性,如下所示
private void myMethod(@Nonnull String str) {
assert str != null
....最新的Netbeans版本(7.3rc2)报告断言检查不是必需的(因为Nonnull注释)。我不能完全确定这是不是Netbeans的bug。
可以因为我指定了@Nonnull注释而删除断言行吗?
据我所知,注释仅在静态分析期间使用,而assert在启用时在执行期间处于活动状态,因此这两个注释是不可选的。
发布于 2013-02-14 20:25:59
断言是在运行时评估的,注释帮助FindBugs在运行前的分析过程中捕获问题。因为这两个检查并不是真的冲突,所以你可以同时保留它们。如果IDE让我删除断言,我会觉得很烦人。
发布于 2013-02-11 18:31:55
Netbeans是对的。如果您认为它可以为null:删除注释。如果您知道它不能:删除断言。
如果您的方法有可能被调用为null值,那么@Nonnull注释就不应该存在。
正如您所说,该注释在运行时实际上并不做任何事情:它只由IDE和静态代码分析工具使用。它不能确保事情不是空的。
发布于 2013-02-12 08:06:31
因为这是私有方法,所以我们可以确保带注释参数不能为空。我认为您可以删除此断言。
如果NetBeans警告公共方法,我认为它有问题。我建议你把断言。
如果你仍然觉得私有方法中的断言是必要的,我认为你可以使用字节码注入。例如,这里有一个用于注入null检查的maven插件。抱歉,这是我的个人项目,但它对我很有效。我想它能满足你的需要。https://github.com/KengoTODA/jsr305-maven-plugin
https://stackoverflow.com/questions/14810030
复制相似问题