我们可以在 Java 7 项目中使用 JSR 308 类型注解(例如@NonNull
,...)吗?如果是,相关的 Maven 依赖项是什么?
问问题
415 次
2 回答
1
是的……有点。类型注释是在 Java 8 中引入的,因此它们在 Java 7 中根本不起作用。例如,JSR 308 的 OpenJDK 实现在 OpenJDK 8 JDK 中。所以你不能使用它。
但是您可以使用检查器框架,它允许您在Java 7中注释掉类型注释,但仍然使用它们。此处描述了设置。您将需要以下 Maven 依赖项:
<dependency>
<groupId>org.checkerframework</groupId>
<artifactId>checker</artifactId>
<version>1.9.12</version>
</dependency>
于 2016-03-29T12:49:01.943 回答
0
通过“Java 7 项目”,我假设您的意思是“可以使用 Java 7 编译器编译的项目”。类型注释是 Java 8 的一个特性——就像 lambdas,如果你使用它们,那么你的代码就不能用标准的 Java 7 编译器编译。
有一个特殊的编译器,类型注解编译器,它读取写在注释中的类型注解,比如List</*@NonNull*/ String>
. 当您使用常规 Java 7 编译器编译此类文件时,该编译器会忽略注释。这就是您的代码可以同时使用类型注释并与 Java 7 兼容的方式。
Checker 框架将特殊编译器与注释处理器打包在一起,这些处理器会警告不正确@NonNull
的注释以及代码中可能出现的空指针异常。您可以在评论中看到它对注释的讨论。
Checker Framework有Maven 集成。您需要选择 Java 7 方向。
于 2016-03-30T10:20:09.510 回答