我安装了最后一个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)
。请看下面的评论!
我也不明白是否会有NonNull
,Interned
等注释
插入JDK或者我们必须下载Checker Framework
答案 0 :(得分:6)
您已自行回答了问题的第一部分。
第二部分:
我也不明白是否会在JDK中插入如
NonNull
,Interned
等注释,或者我们是否必须下载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允许您在运行时甚至在编译时使用库的最终版本,而可插入类型检查可以查看注释,因此类型检查结果更精确。