当前位置: 首页 > 知识库问答 >
问题:

使用哪一个@nonnull Java注释[duplicate]

潘刚洁
2023-03-14
    null

>

  • javax.validation.constraints.NotNull(Docs)
    +javax包因此看起来是未来的证明
    -是JEE的一部分,而不是JSE的一部分。在JSE中,需要导入其他库。
    -静态分析工具不支持(仅运行时验证)

    edu.umd.cs.findbugs.annotations.nonnull (docs)
    -外部库,而不是Javax
    -自findbugs版本3.x以来已不推荐使用
    +用于静态分析(由findbugs和Sonar使用)

    javax.annotation.nonnull (docs)
    +用于静态分析(在findbugs中)
    -JSR-305在fb邮件列表中显示为Hibernate/死亡/未知。作者比尔·普格,即使被直接询问,也已经多年没有对该州发表评论了。

    org.eclipse.jdt.annotation2.0.0 (文档,有趣的演示文稿)
    +用于静态分析(在eclipse中,而不是在findbugs中)
    -eclipse专有(没有尝试单独使用它们)

    org.jetbrains.annotations.notnull (docs)
    +用于静态分析(在intelliJ中,但不在findbugs中)
    -intelliJ专有(但也作为jar公开提供)

    lombok.nonnull(文档)
    +用于控制代码生成
    -专有批注

    android.support.annotation.nonnull(文档)
    +android Studio中的静态分析
    -特定于android的专有注释

    org.checkerframework.checker.nullness.qual.nonnull(docs)
    +JSR308实现,它是Java8的一部分(它引入了在代码的不同部分编写注释的功能,但没有引入新的注释)
    +用于静态代码(但不是findbugs)和运行时分析
    -但是外部库似乎得到了java人员的认可

    目前,我倾向于Checker框架,但我期待其他的视图...

    [免责声明]我知道有人在这里问了这个问题,但没有回答(或者回答错误/不完整/过时)[/免责声明]

  • 共有1个答案

    宋原
    2023-03-14

    没有标准的@nonnull批注。创建这样的注释是JSR305的目标,它已经被放弃了很长时间。在重新构建JSR305之前,将不会有标准的@nonnull注释。甲骨文目前没有这样做的计划。(JEE注释不在JSR305的范围内。)

    对于FutureProfing,要考虑的最重要因素是注释是类型注释还是声明注释。因为@nonnull声明的是变量值的属性,而不是变量本身的属性,所以它应该是一个类型注释。作为类型注释还允许在更多位置上编写注释,如列表<@nonnull string>

    您可以通过查看批注定义上的@target元批注来确定批注是否为类型批注。在撰写本文时,似乎只有Checker框架和Eclipse版本是类型注释,因此我会选择它们而不是声明注释。请注意,任何其他注释的开发人员也可以将它们更新为类型注释;我不知道他们的计划。

     类似资料:
    • 鉴于此注释: my library的用户可以扩展其API,创建带有注释的自定义注释,如下所示: AbstractProcessor提供了一个名为getSupportedAnnotationTypes的方法,该方法返回处理器支持的注释类型的名称。但是如果我指定的名称,如下所示: 当使用注释对类进行注释时,不会通知处理器#进程方法。 因此,当使用

    • 问题内容: 的(Java持久性API)规范有2名不同的方式来指定实体组合键:和。 我在映射的实体上同时使用了这两个注释,但是对于不太熟悉的人来说,这真是一个大麻烦。 我只想采用一种指定复合键的方法。哪个真的是最好的?为什么? 问题答案: 我认为这可能更冗长,因为无法使用任何字段访问运算符来访问整个主键对象。使用,您可以这样做: 这给构成组合键的字段提供了清晰的概念,因为它们都聚集在通过字段访问运算

    • 问题内容: 我们可以使用注释的主要领域是什么?该功能是否可以替代基于XML的配置? 问题答案: 注释是元元对象,可用于描述其他元对象。元对象是类,字段和方法。向一个对象询问其元对象(例如)称为自省。内省可以走得更远,我们可以问一个元对象其注释是什么(例如)。内省和注释属于所谓的反射和元编程。 注释需要以一种或另一种方式解释才有用。注释可以在开发时由IDE或编译器解释,也可以在运行时由框架解释。 注

    • 问题内容: 我是JAX-RS的新手,我试图了解注释的工作方式。 在javadoc中有六个等级的列表()。但是,我在网络上找到将this注释与其他类型一起使用的代码,例如: 是否有可以与此注释一起使用的受支持类型的列表?在执行标准之间,此列表是否会更改? 我目前正在试验Jersey,我担心自己写的代码无法移植到其他JAX-RS实现中。 问题答案: 铆接的JAX-RS 规范定义了你可以通过注入的所有标

    • 我是 JAX-RS 的新手,我正在尝试了解注释应该如何工作。 在javadoc中有一个包含六个类的列表(< code >应用程序、< code>UriInfo、< code >请求、< code>HttpHeaders、< code >安全上下文、< code >提供者)。但是,我在网上找到了将this批注用于其他类型的代码,例如: 是否有可用于此批注的支持类型列表?该列表在标准实施期间是否发生变

    • 我有一把刀: 问题是,当我试图使用DAO进行加载调用时,使用DynamoDBMapper以field d1作为哈希键来获取项目,它会抛出一个DynamoDBExc0019,说:为公共DAO. getField2()找到了空键,但实际上表的值对应于field d2。问题,这是因为Lombok注释而不是手动突变代码,还是一般来说我们一起使用Lombok和DynamoDBAnnotions?