首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >javax.annotation.Nonnull vs assert

javax.annotation.Nonnull vs assert
EN

Stack Overflow用户
提问于 2013-02-11 18:14:55
回答 4查看 17K关注 0票数 15

我在方法参数上使用了Findbugs和javax.annotation.Nonnull。

在私有方法中,我通常添加一个断言行来检查空性,如下所示

代码语言:javascript
复制
private void myMethod(@Nonnull String str) {
    assert str != null
    ....

最新的Netbeans版本(7.3rc2)报告断言检查不是必需的(因为Nonnull注释)。我不能完全确定这是不是Netbeans的bug。

可以因为我指定了@Nonnull注释而删除断言行吗?

据我所知,注释仅在静态分析期间使用,而assert在启用时在执行期间处于活动状态,因此这两个注释是不可选的。

EN

回答 4

Stack Overflow用户

发布于 2013-02-14 20:25:59

断言是在运行时评估的,注释帮助FindBugs在运行前的分析过程中捕获问题。因为这两个检查并不是真的冲突,所以你可以同时保留它们。如果IDE让我删除断言,我会觉得很烦人。

票数 13
EN

Stack Overflow用户

发布于 2013-02-11 18:31:55

Netbeans是对的。如果您认为它可以为null:删除注释。如果您知道它不能:删除断言。

如果您的方法有可能被调用为null值,那么@Nonnull注释就不应该存在。

正如您所说,该注释在运行时实际上并不做任何事情:它只由IDE和静态代码分析工具使用。它不能确保事情不是空的。

票数 8
EN

Stack Overflow用户

发布于 2013-02-12 08:06:31

因为这是私有方法,所以我们可以确保带注释参数不能为空。我认为您可以删除此断言。

如果NetBeans警告公共方法,我认为它有问题。我建议你把断言。

如果你仍然觉得私有方法中的断言是必要的,我认为你可以使用字节码注入。例如,这里有一个用于注入null检查的maven插件。抱歉,这是我的个人项目,但它对我很有效。我想它能满足你的需要。https://github.com/KengoTODA/jsr305-maven-plugin

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14810030

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档