【问题标题】:Should annotations in jar305.jar be preferred over similar annotations in annotation.jar for FindBugs?对于 FindBugs,jar305.jar 中的注释是否应该优于 annotation.jar 中的类似注释?
【发布时间】:2011-09-13 10:54:09
【问题描述】:

FindBugs 分布中,annotations.jar不是jsr305.jar 的子集。但是,似乎有几个注释是重复的(完全重复或非常接近)。如果可以选择,我应该更喜欢jsr305.jar 中的注释吗?

请注意,我不仅想知道使用来自jsr305.jar 的注释会“更好”,因为它们代表了一个标准。相反,如果我更喜欢特定注释的jsr305.jar 版本,我想知道 FindBugs 工具是否会执行相同(或更好)的分析。可能会出现一些 jsr305.jar 注释应该是首选的情况,而另一些则不应该。

在撰写本文时,我正在使用 FindBugs 1.3.9,即 the most recent version。在这个版本中,我看到以下选项(如果有其他选项,请更新此table):

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 annotations 都是重复的:

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

【问题讨论】:

  • 对不起,我还没有意识到你的问题的范围。但是,我使用 findbugs 自己的注释将我所有的项目都转换为标准化的,并且没有注意到任何变化。只是我个人的观察。如果我没记错的话 findbugs 使用相同的代码进行验证。稍后我将查看代码。同时,我投票删除了我的答案,因为它并没有真正回答你的问题:)
  • 是的,但是您的评论是一个很好的答案!请考虑将其作为答案。再次感谢。
  • 我修改了我的答案。仍在寻找一些不言自明的代码部分和几个好的链接。我认为指向一个必须遵循的大量类文件才能理解我的观点没有多大意义。

标签: java annotations static-analysis findbugs


【解决方案1】:

是的,如果可能,您应该更喜欢 JSR305 注释。为什么?因为 JSR305 是一个标准,在可能的情况下坚持标准是完全有意义的。在移植我自己的应用程序时,我没有注意到任何问题或行为变化。此外,您甚至可以定义自己的 @NotNull 注释,findbugs 会选择它(只要您将其命名为 NotNull)请参阅 this blog entry for more details

据我查看源代码所见,findbugs 在内部使用相同的分析方法。调度仅基于注释名称完成。如上面链接的blog post 中所述,请查看 edu.umd.cs.findbugs.ba.NullnessAnnotationNullnessAnnotationDatabase 类,以初步了解这是如何实现的是在内部完成的。看看这个包,你会发现与 jcip 类似的其他注释的类似类。

因此,从实现的角度来看,这并不重要。对于仍然不确定要使用哪些注解的所有人,我会考虑使用标准注解或自定义注解,以避免他们的代码依赖于 findbugs 库。

【讨论】:

  • 感谢您的回复,但请完整地重新阅读我的问题。我对喜欢 jsr305 的东西不是很感兴趣,因为它是一个标准。我同意你的观点,其他情况下,标准应该是首选,但我想知道 FindBugs 是否对相似/相同的注释具有相同的分析支持。
  • 我不知道它只是按名称匹配(显然我没有研究过来源)。感谢您的洞察力!现在我想知道......它是否进行区分大小写的匹配? (对于非空:)
  • 另外,edu.umd.cs.findbugs.annotations中的注解标记为@Deprecated
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-08
  • 1970-01-01
  • 1970-01-01
  • 2011-07-21
相关资源
最近更新 更多