Java 8,Type Annotations和JSR 308

时间:2013-11-25 15:56:55

标签: java annotations

我安装了最后一个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)。请看下面的评论!

我也不明白是否会有NonNullInterned等注释 插入JDK或者我们必须下载Checker Framework

2 个答案:

答案 0 :(得分:6)

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

第二部分:

  

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

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

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

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

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

答案 1 :(得分:5)

第二部分:

  

我也不明白是否注释如下:NonNull,Interned,   将插入JDK或者我们必须下载Checker   框架。

Oracle分布式JDK不包含@NonNull和@Interned等注释 - 既不是它们的定义,也不是JDK方法中出现的注释。

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