相关疑难解决方法(0)

我应该使用哪个@NotNull Java注释?

我希望使我的代码更具可读性,并使用IDE代码检查和/或静态代码分析(FindBugs和Sonar)等工具来避免NullPointerExceptions.许多工具似乎与彼此的@NotNull/ @NonNull/ @Nonnull注释不兼容,并列出我的代码中的所有这些工具都很难阅读.有什么建议是"最好的"吗?这是我发现的等效注释列表:

  • javax.validation.constraints.NotNull
    创建用于运行时验证,而不是静态分析.
    文件

  • edu.umd.cs.findbugs.annotations.NonNull
    Findbugs静态分析使用,因此Sonar(现为Sonarqube)
    文档

  • javax.annotation.Nonnull
    这可能也适用于Findbugs,但JSR-305处于非活动状态.(另请参阅:JSR 305的状态是什么?) 来源

  • org.jetbrains.annotations.NotNull
    由IntelliJ IDEA IDE用于静态分析.
    文件

  • lombok.NonNull
    用于控制Project Lombok中的代码生成.
    占位符注释,因为没有标准.
    来源, 文档

  • android.support.annotation.NonNull
    Android中提供的标记注释,由support-annotations包
    文档提供

  • org.eclipse.jdt.annotation.NonNull
    Eclipse用于静态代码分析
    文档

java ide null annotations nullpointerexception

918
推荐指数
20
解决办法
27万
查看次数

JetBrains的@Contract注释

org.jetbrains.annotations.Contract注释如何工作?IntelliJ IDEA如何支持它?

java jetbrains-ide intellij-idea

45
推荐指数
3
解决办法
2万
查看次数

如何在默认情况下指示成员字段是@Nonnull?

我的问题是后续这一块.

在过去的FindBugs版本中,可以使用@DefaultAnnotation(Nonnull.class)@DefaultAnnotationForFields(Nonnull.class)表示应将包中的所有字段视为@Nonnull.在FindBugs的(2.0)的当前版本@DefaultAnnotation@DefaultAnnotationForFields已被弃用,并且我们都应该使用JSR-305来代替.但JSR-305似乎并未涵盖(现已弃用)FindBugs注释所涵盖的所有内容.

javadoc的确实表明了一些替代品:

  • @ParametersAreNonnullByDefault.这(显然)仅适用于参数,而不适用于成员字段.
  • @CheckReturnValue,当应用于类型或包时.同样,这不适用于成员字段.
  • @TypeQualifierDefault.也许这可以做我想要的,但我不明白它是如何工作的,除了一些神秘的javadoc之外,我无法找到任何有关其用法或意图的文档或示例.我认为这将有助于我创建自己的注释,但我能确定所有工具(FindBugs,Eclipse等)都能正确地解释这个新注释(甚至根本不能)吗?

javadoc中没有提供关于如何处理其弃用任何提示.

因此,使用当前版本的FindBugs和/或JSR-305,我应该如何表明特定包中(甚至某个类)中的所有成员字段都应该被视为@Nonnull?它甚至可能吗?

java findbugs jsr305

21
推荐指数
1
解决办法
4284
查看次数

jar305.jar中的注释是否应优先于FindBugs的annotation.jar中的类似注释?

FindBugs的分布,annotations.jar不是的一个子集jsr305.jar.但是,几个注释似乎是重复的(要么完全要么非常密切).jsr305.jar如果我有选择,我是否应该更喜欢注释?

请注意,我不仅仅想知道jsr305.jar仅仅因为它们代表标准而使用注释会"更好" .相反,我想知道如果我更喜欢jsr305.jar特定注释的版本,FindBugs工具是否会执行相同(或更好)的分析.可能是某些jsr305.jar注释应该是首选的,但其他注释则不应该.

我正在使用FindBugs 1.3.9,这是本文撰写时的最新版本.在此版本中,我看到以下选项(如果有其他选项,请更新此):

edu.umd.cs.findbugs.annotations.CheckForNull→javax.annotation.CheckForNull
edu.umd.cs.findbugs.annotations.CheckReturnValue→javax.annotation.CheckReturnValue
edu.umd.cs.findbugs.annotations.NonNull→javax.annotation. Nonnull(NB大写)
edu.umd.cs.findbugs.annotations.Nullable→javax.annotation.Nullable
edu.umd.cs.findbugs.annotations.When→javax.annotation.meta.When

此外,所有JCIP 注释都是重复的:

net.jcip.annotations.GuardedBy→javax.annotation.concurrent.GuardedBy
net.jcip.annotations.Immutable→javax.annotation.concurrent.Immutable
net.jcip.annotations.NotThreadSafe→javax.annotation.concurrent.NotThreadSafe
net.jcip.annotations .ThreadSafe→javax.annotation.concurrent.ThreadSafe

java annotations static-analysis findbugs

12
推荐指数
1
解决办法
3899
查看次数