当前位置: 首页 > 面试题库 >

javax.annotation:@Nullable与@CheckForNull

祝允晨
2023-03-14
问题内容

两者有什么区别?两者似乎都意味着该值可以为null,因此应进行相应处理,即检查是否为null。

更新: 上面的两个注释是JSR-305 /
FindBugs的一部分:http :
//findbugs.sourceforge.net/manual/annotations.html


问题答案:

我认为从添加的链接中可以很清楚地看到:如果您使用@CheckForNull并且使用该值的代码未检查null,FindBugs会将其显示为错误。

FindBugs将忽略@Nullable

实际上,此注释仅在覆盖总体NonNull注释时有用。

@CheckForNull在必须始终检查该值的情况下使用。@Nullablenull可能可以的地方使用。

编辑:目前似乎@CheckForNull还没有很好的支持,所以我建议避免使用它@NonNull另一个想法是直接与FindBugs开发人员联系,并询问他们对文档不一致的意见。



 类似资料:
  • 问题内容: 我想使用 注释消除。我在网上找到了一些教程,我注意到这个注释来自软件包;但是当我导入它时,会生成一个编译错误:找不到符号 问题答案: 您需要包括一个存在该类的罐子。您可以在这里找到它 如果使用Maven,则可以添加以下依赖项声明: 对于Gradle:

  • 好的,这可能是一个NooB问题(我更喜欢C语言),但我迷失在java森林及其框架森林中。。。 我试图研究EclipseRCP开发。为此,我将遵循以下著名教程:http://www.vogella.com/tutorials/EclipseRCP/article.html 在步骤15中,我需要添加以下依赖项包以导入到我的包中。javax。注释javax。注射 问题是我不能选择这些(它们不在选择列表中

  • 导入数据包时的错误是:数据包中javax.annotation不可访问。当我编译时,因为我不能在代码中使用生成的错误是:启动层初始化时发生错误 JAVAlang.module。FindException:无法派生C:\Users“NAME”的模块描述符。p2\pool\plugins\es。ucm。盖亚。科利布里斯托。图书馆池1.0。0\lib\databaseconnector\jboss-tr

  • 我试图提取JDBC数据库驱动程序的数据库元数据。 而现在我面对的是一部分我无法向自己解释的留档: 方法:DatabaseMetaData.getColumns(…) (JavaDoc)声明了两个不同的“可空性”列: 和 我能想到的两个不同专栏的唯一想法是: 其中一个定义了表列在读取时可以为空,而其他可以插入到该表列中的状态可以为空。但是我无法确定这个想法的正确性。 有谁确切地知道这两列之间的区别是

  • 问题内容: 在JPA中,我什么时候使用属性和注释感到困惑。有什么区别? 问题答案: 是用于生成架构的指令。在类中生成的数据库列将在实际数据库中标记为不可为空。 是运行时指令。它所做的主要功能是与延迟加载有关。您不能延迟加载非集合映射的实体,除非您记得设置了optional = false(因为Hibernate不知道那里应该有一个代理还是一个null,除非您告诉它null是不可能的,否则它可以生成

  • 问题内容: 我在Java中看到一些声明为的方法: 有什么意义吗?这是否意味着输入可能是? 如果没有注释,输入仍然可以为null,所以我猜不仅仅是吗? 问题答案: 它清楚地表明该方法接受空值,并且如果您覆盖该方法,则还应该接受空值。 它也为诸如FindBugs之类的代码分析器提供了提示。例如,如果这样的方法取消引用其参数而不先检查null,则FindBugs将发出警告。