Java 8, Type Annotations and JSR 308

2022-09-04 20:54:12

我已经安装了最后一个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中,或者我们是否必须下载Checker框架NonNullInterned


答案 1

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

对于第二部分:

我也不明白像:,,等这样的注释是否会插入JDK中,或者我们是否必须下载Checker框架。NonNullInterned

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

理想情况下,您应该将确定的源代码和/或字节码文件,从规范位置获得。但是,如果您要重现注释源代码的突出部分(包名,注释名称,字段名称和类型)并对其进行编译,那么JVM的其余部分将不再明智。

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

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


答案 2

对于第二部分:

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

Oracle分布式JDK不包含像@NonNull和@Interned这样的注释 - 既没有它们的定义,也没有它们在JDK方法上的出现。

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


推荐