Java 8,Type Annotations和JSR 308

我安装了最后一个JDK 8(b116),但我注意到我不能使用类型注释。 例如,如果我写的话,阅读Java教程:

String str = null; String myString = (@NonNull String) str; 

要么

 TEST st = new @Interned TEST(); 

编译器给我以下错误:

 annotation type not applicable to this kind of declaration 

现在它有效。 在使用类型注释之前,我们必须使用@Target(ElementType.TYPE_USE)注释注释。 看看下面的评论!

我也不明白是否会在JDK中插入注释如: NonNullNonNull等,或者我们是否必须下载Checker Framework

您已自己回答了问题的第一部分。

第二部分:

我也不明白是否会在JDK中插入注释: NonNullNonNull等,或者我们是否必须下载Checker Framework。

注释只是一种Java类/接口。 它们必须在源代码中定义并编译。

理想情况下,你应该从规范的地方获得权威的源代码和/或字节码文件。 但是,如果要重现注释的源代码(包名称,注释名称,字段名称和类型)的显着部分并对其进行编译,那么JVM的其余部分将更加明智。

但是当你谈到像@NonNull@Interned这样的特定注释时,你需要意识到在不同的包中可能存在多个版本的这些注释。 这可能会导致问题(对于注释处理软件),直到出现标准/事实标准版本。 我不知道Checkers Framework是否可以被称为事实标准……

您询问是否将检查器注释添加到Java 8库中。 我个人对此表示怀疑,因为这些注释的包名称是不可接受的。 但是拭目以待……

第二部分:

我也不明白是否会在JDK中插入注释:NonNull,Interned等,或者我们是否必须下载Checker Framework。

Oracle分布式JDK不包含@NonNull和@Interned等注释 – 既不定义它们,也不会在JDK方法上出现它们。

但是,Checker Framework包含JDK的注释版本,如Checker Framework手册中所述 。 Checker Framework允许您在运行时甚至在编译时使用库的最终版本,而可插入类型检查可以查看注释,因此类型检查结果更加精确。