2

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

4

2 回答 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 回答