【问题标题】:The type org.eclipse.jdt.annotation.NonNull cannot be resolved. It is indirectly referenced from required .class filesorg.eclipse.jdt.annotation.NonNull 类型无法解析。它是从所需的 .class 文件中间接引用的
【发布时间】:2016-02-20 12:33:36
【问题描述】:

当我将 Java 8 方法引用双冒号运算符 (::) 与新运算符(例如 MyType::new)一起使用时,我在 Spring Tool suite (STS) 的 Eclipse 中收到此错误:

org.eclipse.jdt.annotation.NonNull 类型无法解析。它是从所需的 .class 文件中间接引用的

如何摆脱这个错误?

【问题讨论】:

    标签: java eclipse java-8 spring-tool-suite method-reference


    【解决方案1】:

    我已经通过更改“对空规范使用默认注释”解决了这个问题

    我已经输入了两个类名:

    javax.annotation.Nonnull
    javax.annotation.Nullable
    

    【讨论】:

      【解决方案2】:

      Eclipse 有一个名为基于注解的空值分析的功能,它使用注解(例如@NonNull@Nullable)提供编译时检查。当类路径中缺少注释时,您会收到此错误。

      如果您不打算使用基于注解的空值分析功能,您可以在 Eclipse 中禁用它。

      打开全局或项目设置并转到Java > Compiler > Warnings。在Null analysis 类别中,取消选中Enable annotation-based null analysis。然后重建工作区,这些错误将不再显示。

      【讨论】:

      • 这真的应该是接受者的答案,而不是向项目添加其他依赖项,甚至没有运行时范围。
      【解决方案3】:

      Stephan Herrmann 的评论中提供了错误描述。有开放的Eclipse issue 使这个问题对用户更友好。

      解决方案是包含以下依赖项:

      <dependency>
          <groupId>org.eclipse.jdt</groupId>
          <artifactId>org.eclipse.jdt.annotation</artifactId>
          <version>2.0.0</version>
      </dependency>
      

      【讨论】:

      • 对,这个错误表明Eclipse项目被配置为执行基于注解的空值分析,但是类路径上没有空注解。使空注释可用(通过您的项目使用的任何依赖机制)不仅是一种解决方法,而且实际上是正确的解决方案。 Eclipse 错误是关于适当地报告此配置问题(比问题中的解决错误更好)。
      • @StephanHerrmann,感谢您的澄清。我更新了我的答案。
      • 运行时不需要这个胡言乱语,那么为什么不将其声明为“提供的”依赖项呢? (因为我们必须使用依赖管理器来解决这个问题)
      • 我完全同意这不应该或者不应该(!)通过摆弄 pom 中的依赖项来解决!在我们的代码中,我们遇到了错误,并且我们没有使用任何与 NonNull 相关的 eclipse 注释(也没有我们依赖的任何代码)。似乎 .filter(Objects::nonNull) 表达式作为较长流链的一部分的简单存在导致了这个问题,恕我直言,这是一个明显的错误!
      猜你喜欢
      • 1970-01-01
      • 2017-10-05
      • 2013-05-14
      • 2017-02-26
      • 2016-10-31
      • 2015-02-10
      • 2019-01-26
      • 2012-04-30
      • 2014-10-15
      相关资源
      最近更新 更多