使用 Java 7 类型注释 (JSR 308)?
Type annotation (JSR 308) with Java 7?
我们可以在 Java 7 项目(如 @NonNull
, ...)中使用 JSR 308 类型注释吗?如果是,相关的maven依赖是什么?
是的……有点。类型注释是在 Java 8 中引入的,因此它们在 Java 7 中根本不起作用。例如,JSR 308 的 OpenJDK 实现在 OpenJDK8JDK。所以你不能用那个。
但是您可以使用检查器框架来解决这个问题,它允许您在 Java 7, but still use them. Setup is described here 中注释掉类型注释。您将需要以下 Maven 依赖项:
<dependency>
<groupId>org.checkerframework</groupId>
<artifactId>checker</artifactId>
<version>1.9.12</version>
</dependency>
"Java 7 project",我假设你的意思是 "a project that can be compiled using a Java 7 compiler"。类型注释是 Java 8 的一个特性——就像 lambda,如果你使用它们,那么你的代码就不能用标准的 Java 7 编译器编译。
有一个特殊的编译器,type annotations compiler, that reads type annotations written in comments,就像List</*@NonNull*/ String>
。当您使用常规 Java 7 编译器编译此类文件时,该编译器会忽略注释。这就是您的代码可以使用两种类型注释并与 Java 7.
兼容的方式
Checker Framework 将特殊编译器与注释处理器打包在一起,这些处理器会警告不正确的 @NonNull
注释和代码中可能存在的空指针异常。
可以看到它对annotations in comments.
的讨论
有Maven integration for the Checker Framework个。您需要选择 Java 7 个方向。
我们可以在 Java 7 项目(如 @NonNull
, ...)中使用 JSR 308 类型注释吗?如果是,相关的maven依赖是什么?
是的……有点。类型注释是在 Java 8 中引入的,因此它们在 Java 7 中根本不起作用。例如,JSR 308 的 OpenJDK 实现在 OpenJDK8JDK。所以你不能用那个。
但是您可以使用检查器框架来解决这个问题,它允许您在 Java 7, but still use them. Setup is described here 中注释掉类型注释。您将需要以下 Maven 依赖项:
<dependency>
<groupId>org.checkerframework</groupId>
<artifactId>checker</artifactId>
<version>1.9.12</version>
</dependency>
"Java 7 project",我假设你的意思是 "a project that can be compiled using a Java 7 compiler"。类型注释是 Java 8 的一个特性——就像 lambda,如果你使用它们,那么你的代码就不能用标准的 Java 7 编译器编译。
有一个特殊的编译器,type annotations compiler, that reads type annotations written in comments,就像List</*@NonNull*/ String>
。当您使用常规 Java 7 编译器编译此类文件时,该编译器会忽略注释。这就是您的代码可以使用两种类型注释并与 Java 7.
Checker Framework 将特殊编译器与注释处理器打包在一起,这些处理器会警告不正确的 @NonNull
注释和代码中可能存在的空指针异常。
可以看到它对annotations in comments.
有Maven integration for the Checker Framework个。您需要选择 Java 7 个方向。