JSR305和JSR308(Java 类型注释)——哪个将成为标准?

20
3个回答

17

我可以回答你的最后一个问题。它们不是同一件事情。305是关于新注解的,你可以将它们放在已经存在的地方,这可以帮助通过设计契约系统提供编程可见性。因此,如果某个方法应该不返回null,或者如果某个方法应该永远不会接收到null参数,那么就有可能告诉分析注解的系统在这段代码中寻找这个特定的情况。

308是关于能够注释更多的东西,例如泛型参数和类型转换。我想主要用途是能够抑制特定类型转换的警告,而不必为此声明局部变量。@SuppressWarnings注解已经存在(而JSR-305将尝试定义新的注解),但在JSR-308中可以应用于更多情况。

根据这个,308将成为Java7的一部分,这意味着它已经相当稳定了。JSR-305没有列在列表中,所以看起来它不会进入Java7。


那么,实际上JSR-308只是语言的扩展,而那些在项目页面上讨论的检查器是可选的,并且不会在JDK中提供,对吗? - ivan_ivanovich_ivanoff
看起来是这样。两个提案因为它们共同最有用而一起工作(这就是 JSR-308 页面在宣传那种功能的原因)。我没有权威信息表明 JDK7 中会或不会有什么,但似乎 JSR-305 没有被采纳,不过我可能说错了。 - Yishai
1
JSR 308已经推迟到Java:http://openjdk.java.net/projects/jdk7/features/#deferred - reprogrammer

12

3
JSR 308确实出现在Java 8中。 - mernst

1

对于未来的读者,JSR 308正在集成到Java 7中。它的一些更改已经被推送到Java 7的公共测试版中。然而,JSR305没有通过审核。


JSR308会让Java7提供一个标准的检查器框架吗? - ivan_ivanovich_ivanoff
检查器正在 http://types.cs.washington.edu/jsr308 进行分发。 JDK 可能会捆绑它们,但目前还没有任何保证。 - notnoop
这篇文章似乎表明JSR-305将成为Java 7的一部分:http://today.java.net/pub/a/today/2008/09/11/jsr-305-annotations.html - Wim Deblauwe
4
@festerwim,这篇文章已经过时了(来自2008年!)。JSR 305现在基本上处于休眠状态,不是Java 7或任何未来版本。相反,JSR 308已被推迟到Java 8。 - notnoop
JSR 308已经推迟到Java:http://openjdk.java.net/projects/jdk7/features/#deferred - reprogrammer

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