Java8、类型注释和JSR308
我已经安装了最后一个JDK 8(b116),但是我注意到我不能使用类型注释。 例如,如果我写以下内容,请阅读Java教程:Java8、类型注释和JSR308,java,annotations,Java,Annotations,我已经安装了最后一个JDK 8(b116),但是我注意到我不能使用类型注释。 例如,如果我写以下内容,请阅读Java教程: String str = null; String myString = (@NonNull String) str; 或 编译器给了我以下错误: annotation type not applicable to this kind of declaration 现在它可以工作了。在使用类型注释之前,我们必须对注释进行注释 使用@Target(ElementType.
String str = null;
String myString = (@NonNull String) str;
或
编译器给了我以下错误:
annotation type not applicable to this kind of declaration
现在它可以工作了。在使用类型注释之前,我们必须对注释进行注释
使用@Target(ElementType.TYPE\u USE)
。请看下面的评论强>
我也不明白诸如:NonNull
,Interned
等注释是否会被删除
插入JDK,或者如果我们必须下载,您已经自己回答了问题的第一部分 第二部分: 我也不明白诸如:
NonNull
、Interned
等注释是否会插入JDK,或者我们是否必须下载Checker框架
注释只是一种Java类/接口。它们必须在源代码中定义并编译
理想情况下,您应该提供从规范位置获得的最终源代码和/或字节码文件。但是,如果您要复制注释源代码的重要部分(包名、注释名、字段名和类型)并编译它,JVM的其余部分将不会更明智
但是,当您谈到诸如@NonNull
和@Interned
之类的特定注释时,您需要意识到,在不同的包中可能存在这些注释的多个版本。这可能会导致问题(对于注释处理软件),直到出现标准/事实上的标准版本。我不知道Checkers框架是否可以称为一个事实上的标准。。。然而
您询问是否将checkers注释添加到Java8库中。我个人对此表示怀疑,因为这些注释的包名是不可接受的。但请等着看……第二部分:
我也不明白注释是否像:NonNull,Interned,
等将被插入到JDK或如果我们必须下载检查程序
框架
Oracle分布式JDK不包含@NonNull和@Interned之类的注释——既不包含它们的定义,也不包含它们在JDK方法中的出现
但是,Checker框架包含JDK的注释版本,如中所述。Checker框架允许您在运行时甚至编译时使用库的最终版本,而可插入类型检查可以看到注释,因此类型检查结果更精确。检查这些注释是否可以应用于这些位置。检查
@Target
注释。是否确定您正在使用Java 8编译器,并且已将源代码级别设置为Java 8?因为您所说的与Oracle Java教程中关于Java 8的内容直接矛盾;请参阅@Sotirios Delimanolis,好的,它与我的注释界面一起工作。也许我把NonNull、Interned等搞得一团糟。。。JDK中不存在的。。。似乎可以理解,使用类型注释就足以使用@Target(ElementType.type\u use)@StephenC,是的,我用的是Java 8编译器。我的错误是没有使用@Target(ElementType.TYPE\u use)。现在它起作用了。你应该花一分钟来回答你自己的问题。。。并接受它。
annotation type not applicable to this kind of declaration