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

对于FindBugs,应该优先于jar305.jar中的批注而不是那些notification.jar中的类似批注吗?

水昊阳
2023-03-14
问题内容

在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


问题答案:

是的,如果可能的话,您应该首选JSR305批注。为什么?由于JSR305是标准,因此在可能的情况下遵守该标准是很有意义的。在移植自己的应用程序时,我没有发现任何问题或行为改变。此外,您甚至可以定义自己的@NotNull批注,并且findbugs会选择它(只要您将其命名为NotNull),请参阅此博客条目以获取更多详细信息。

据查看源代码所见,findbugs在内部使用相同的分析方法。仅基于注释名称进行分派。如上面链接的博客文章所述,请查看edu.umd.cs.findbugs.ba.NullnessAnnotation和NullnessAnnotationDatabase类,以初步了解如何在内部完成此操作。看看这个包,您会发现类似jcip的其他注释的相似类。

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



 类似资料:
  • 问题内容: 我想@WebServlet在运行于Tomcat 8的Java EE Web应用程序中使用注释。 我已经读到我需要在自己的服务器中声明Servlet版本3.1,web.xml并且我的Servlet需要扩展HttpServlet。我做了所有这些,但仍然@WebServlet行不通。我正在获取HTTP 404。 我也试过我的配置用metadata-complete=”false”在我web.

  • 问题内容: 我已经了解了Java 和接口之间的区别。从Java 1.5开始,已将其他功能添加到接口,并已调用这些功能以保持向后兼容性。 我的问题是,现在我们有了接口,我们应该一直使用吗?不使用和使用的用例是什么? 问题答案: 两者都有其用途,并且都由java.util.concurrent中的Executor框架支持。Runnable已经存在了更长的时间,但是它仍然在使用并且不被阻止。 可调用程序

  • 问题内容: 如何使用spring-data-elasticsearch使用批注进行@Query(value =“ {” query“:”“}”)的聚集? 问题答案: 您不能使用仅用于发送查询而不是聚合的注释的注释。 使用Spring Data Elasticsearch实现此目的的唯一方法是利用和:

  • 问题内容: 我当时在看使用Jersey的优秀REST教程。在页面下方,构建了一个Web资源,该资源的标题为它本身包含两个实例变量 我想知道确切地如何初始化实例变量和实例变量?我知道使用注释可以注入信息,但是什么时候发生?泽西岛会自动处理吗? 问题答案: Jersey 不会修改 类,但 会 在客户端的每个请求中 创建 它。 之后 类的构造函数被调用,上下文字段注入。 (如果您尝试访问构造函数中的那些

  • 问题内容: 我正在尝试在Hibernate 3.5中使用注释 检索数据时,一切正常。但是我无法使其重新排序列表中的元素并将新的订单保存到数据库中。 问题答案: Hibernate不支持@OneToMany(mappedBy =“ …”)和@OrderColumn的组合。此JIRA问题跟踪使用此无效组合时引发更明显错误消息的请求:http : //opensource.atlassian.com/p

  • 我使用Jackson(2.1.1)进行JSON序列化/反序列化。我有一个带有JAXB注释的现有类。大多数注释都是正确的,可以像jackson一样使用。我使用mix-ins稍微改变这些类的反序列化/序列化。 在我的ObjectMapper构造函数中,我执行以下操作: 基于上述情况,由于内省者的顺序,Jackson注释优先于Jaxb。这是基于Jackson Jaxb文档的。对于我希望忽略的字段,将添加