JSR 305的现状是什么?

113

我看到了这个问题:JSR305 vs. JSR308(Java类型注解)-哪个将成为标准?,并理解了JSR 308JSR 305之间的区别。

我也明白,目前308被安排用于Java 7,而305没有,我想知道305的整体状态。

具体来说,我在一些项目中使用Google CollectionsJSR-305(类似于Guice最佳实践之一所倡导的方式),想知道是否有更加“面向未来方向”的方法我应该使用。我计划在JSR-305组上也提出这个问题,但那个组活动不太多,我只是想知道这里是否有任何更多信息。


1
我会接受你留给Kevin的答案,但是我在那些文章中找不到一个明确说明它们将在Java 7中出现还是不会?(实际上,在发布问题之前,我已经简要地审查了这些信息。)你是否看到其中一个具体提到它们将被包含在内(如你的答案所示)?提前感谢你的帮助。 - Charlie Collins
1
经过这么长时间的努力和其他一些努力来弄清楚到底发生了什么,我决定授予最佳答案、唯一答案和“答案”荣誉。 ;) - Charlie Collins
Java 9: https://dev59.com/YVoU5IYBdhLWcg3wTVse - Christophe Roussy
Mark Reinhold最近在另一个SO帖子上发表评论,称“JSR 305本来应该标准化javax.annotation.NonNull,但由于其规范负责人失踪而未能完成。” - Flow
5个回答

82

如此答案所述,JSR-305 提出了新的注释,如@NonNull,而JSR-308则提议允许在泛型声明等新地方使用注释。

引用JSR 308页面:

…本文档不提出任何注解,只是指明它们可以出现在Java代码的哪些位置。

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

截至2017年,JSR 305(新注释)仍然保持“休眠”官方状态。有一个问题在谷歌小组中未能回答自2010年以来。

JSR-305注释的参考实现在此处,被许多项目使用,包括guava。使用maven可以通过将其添加到pom文件中来使用JSR-305参考实现:

<dependency>
    <groupId>com.google.code.findbugs</groupId>
    <artifactId>jsr305</artifactId>
    <version>3.0.0</version>
</dependency>

2
链接到Maven中央仓库上的com.google.code.findbugs:jsr305(最新版本为3.0.0)。 - Paolo Fulgoni
你可以使用与 org.codehaus.mojofindbugs-maven-plugin 相同的版本来同步两者。 - Christophe Roussy
2
Java 9已经具备了所有特性,但尚未发布。看起来JSR-305并未被包含在其中。是否有其他JSR添加了类似的注释? - dlamblin

21

JSR-308 有一个常见问题解答:http://types.cs.washington.edu/jsr308/current/jsr308-faq.html#pluggable-types - Christophe Roussy

12

如果您关注nullability annotations(空指针注解),我建议使用SpotBugs项目中提供的edu.umd.cs.findbugs.annotations命名空间下的注解。现在大多数代码检查工具或IDE都应该支持,它并不像JSR 305提出的javax.annotation那么好,但是请记住,JSR 305从未被批准,并且实际上从未在JSR 305提案中附带任何类文件jar。

以下是一些有关此主题的有趣文章:

JSR 305与JSR 308对比

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

唯一的联系是两个不同项目(FindBugs和Checker Framework)都与空值安全性和空值注释主题相关。

从内容上看,这两个JSR没有任何关系。


10

Java 8 被 JSR 337 描述:规范已达到最终状态:在这里查看

  • JSR 308 已确定包含
  • JSR 305 已确定排除

1
根据Alex Miller的Java 7博客(链接),JSR-308(和305)计划加入Java 7。也许他会出现在这里并提供更多信息。

56
两者都没有被纳入Java 7。 - Miles
8
JSR308将出现在Java 8中,但是(截至2013年3月)JSR305仍处于休眠状态。 - Maurice Naftalin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接