Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java8、类型注释和JSR308_Java_Annotations - Fatal编程技术网

Java8、类型注释和JSR308

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.

我已经安装了最后一个JDK 8(b116),但是我注意到我不能使用类型注释。 例如,如果我写以下内容,请阅读Java教程:

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