【问题标题】:Type annotation (JSR 308) with Java 7?使用 Java 7 键入注释 (JSR 308)?
【发布时间】:2016-03-29 11:47:30
【问题描述】:

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

【问题讨论】:

    标签: java jsr type-annotation


    【解决方案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>
    

    【讨论】:

    • 谢谢。我会检查的。
    【解决方案2】:

    “Java 7 项目”是指“可以使用 Java 7 编译器编译的项目”。类型注释是 Java 8 的一个特性——就像 lambdas,如果你使用它们,那么你的代码就不能用标准的 Java 7 编译器编译。

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-01
      • 2016-10-02
      • 2013-10-23
      • 1970-01-01
      • 1970-01-01
      • 2013-08-06
      • 2014-07-15
      • 1970-01-01
      相关资源
      最近更新 更多