107

我已经看到了JSR305 与 JSR308(Java 类型注释)的问题——哪个将成为标准?我了解JSR 308JSR 305之间的区别。

我也明白,这个时候,Java 7 是 308,而 305 不是,我很好奇 305 的整体状态。

具体来说,我在我的一些项目中使用Google CollectionsJSR-305(以类似于Guice 最佳实践倡导者之一的方式)并且想知道我是否应该使用更“未来方向”友好的方法反而。我还打算在 JSR-305 小组上询问这个问题,但该小组没有太多活动,我只是想知道这里是否有人有更多信息。

4

5 回答 5

77

正如这个答案中所描述的,JSR-305提出了新的注释,例如@NonNull,而JSR-308建议允许在新的地方进行注释,例如通用声明。

引用JSR 308页面:

…本文档不提出任何注释,只是指定它们可以出现在 Java 代码中的什么位置。

JSR 308(新位置的注释)包含在JEP 104下的java 8中。

截至 2017 年,JSR 305(新注释)继续保持“休眠”的官方状态。自2010 年以来,关于它在 google 组中的状态的问题一直没有得到解答。

这里有一个 JSR-305 注释的参考实现,包括 guava 在内的许多项目都在使用它。使用 maven,您可以通过将其添加到您的 pom 来使用 JSR-305 参考实现:

<dependency>
    <groupId>com.google.code.findbugs</groupId>
    <artifactId>jsr305</artifactId>
    <version>3.0.0</version>
</dependency>
于 2014-03-06T04:52:49.113 回答
20

JSR 305 不会成为 Java 8 的一部分:

于 2014-03-06T05:06:07.390 回答
9

Java 8 由 JSR 337 描述:规范已达到最终状态:请参阅此处

  • JSR 308 肯定在
  • JSR 305 肯定出局了
于 2014-03-11T07:20:30.353 回答
6

如果您担心可空性注释,那么我建议您使用命名空间中 SpotBugs 项目提供的注释edu.umd.cs.findbugs.annotations。如今,大多数 linter 或 IDE 都应该支持它。它不如javax.annotationJSR 305 中提议的那么好,但请记住,JSR 305 从未获得批准,实际上没有jar包含类的文件附加到 JSR 305 提议中。

关于此的更多有趣的文章:

JSR 305 与 JSR 308

JSR 305 和 JSR 308 之间几乎没有任何关系。JSR 308 是关于将注释应用于泛型(java 类型参数)的能力。JSR 308 已合并为 Java SE 8 的一部分。

唯一的链接是两个 JSR 都与两个不同的项目(FindBugs 和Checker Framework)相关,这两个项目涉及空安全性和可空性注释主题。

就内容而言,JSR 没有任何关系。

于 2021-05-06T09:35:45.997 回答
1

根据 Alex Millers Java 7 博客,JSR-308(和 305)计划进入 Java 7。也许他会出现在这里并为您提供更多信息。

于 2010-02-18T15:27:16.693 回答