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