我们可以在Java 7项目中使用JSR 308类型注释(如@NonNull
,...)吗?如果是,那么相关的maven依赖是什么?
答案 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方向。