使用Java 7键入注释(JSR 308)?

时间:2016-03-29 11:47:31

标签: java jsr type-annotation

我们可以在Java 7项目中使用JSR 308类型注释(如@NonNull,...)吗?如果是,那么相关的maven依赖是什么?

2 个答案:

答案 0 :(得分:1)

是的......有点儿。类型注释是在Java 8中引入的,因此它们在Java 7中根本不起作用。例如,JSR 308的OpenJDK实现在OpenJDK 8 JDK中。所以你不能使用它。

但你可以使用检查器框架来解决这个问题,允许你在Java 7中注释掉类型注释,但仍然使用它们。设置描述为here。您需要以下maven依赖:

<dependency>
    <groupId>org.checkerframework</groupId>
    <artifactId>checker</artifactId>
    <version>1.9.12</version>
</dependency>

答案 1 :(得分:0)

通过“Java 7项目”,我假设您的意思是“可以使用Java 7编译器编译的项目”。类型注释是Java 8的一个特性 - 就像使用lambda一样,如果你使用它们,那么你的代码就无法使用标准的Java 7编译器进行编译。

有一个特殊的编译器type annotations compiler,它读取类型注释written in comments,如List</*@NonNull*/ String>。使用常规Java 7编译器编译此类文件时,该编译器会忽略注释。这就是您的代码可以使用两种类型注释并与Java 7兼容的方式。

Checker Framework将特殊编译器与注释处理器打包在一起,注释处理器会警告错误的@NonNull注释以及代码中可能的空指针异常。 您可以看到对annotations in comments的讨论。

Maven integration for the Checker Framework。您需要选择Java 7方向。