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

Java 无法解析类型org.eclipse.jdt.annotation.NonNull。它是从必需的.class文件间接引用的,java,eclipse,java-8,spring-tool-suite,method-reference,Java,Eclipse,Java 8,Spring Tool Suite,Method Reference,当我将Java 8方法引用双冒号运算符(:)与新运算符(例如MyType::new)一起使用时,我在Eclipse of Spring工具套件(STS)中遇到此错误: 无法解析类型org.eclipse.jdt.annotation.NonNull。它是从必需的.class文件间接引用的 如何消除此错误?Stephan Herrmann的评论中提供了错误描述。有很多方法可以让这个问题变得更加用户友好 解决方案包括以下依赖项: org.eclipse.jdt org.eclipse.jdt.an

当我将Java 8方法引用双冒号运算符(
)与新运算符(例如
MyType::new
)一起使用时,我在Eclipse of Spring工具套件(STS)中遇到此错误:

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


如何消除此错误?

Stephan Herrmann的评论中提供了错误描述。有很多方法可以让这个问题变得更加用户友好

解决方案包括以下依赖项:


org.eclipse.jdt
org.eclipse.jdt.annotation
2.0.0

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

如果您不打算使用基于注释的空分析特性,您可以在Eclipse中禁用它


打开全局或项目设置,然后转到
Java>Compiler>Warnings
。在
空分析
类别中,取消选中
启用基于注释的空分析
。然后重新构建工作区,这些错误将不会再次显示。

我已通过更改“使用默认注释为空规范”解决了此问题

我已输入两个类名:

javax.annotation.Nonnull
javax.annotation.Nullable

正确,错误表明Eclipse项目配置为执行基于注释的空分析,但类路径上没有空注释。使空注释可用(通过您的项目使用的任何依赖机制)不仅是一种解决方法,而且实际上是正确的解决方案。Eclipse错误是关于适当地报告此配置问题(比解决问题中的错误更好)。@StephanHerrmann,感谢您的澄清。我更新了我的答案。这个废话在运行时是不需要的,所以为什么不声明它是一个“提供的”依赖项呢?(因为我们必须使用依赖关系管理器来解决这个问题)我完全同意不应该或者不应该(!)通过修改pom中的依赖关系来解决这个问题!在我们的代码中,我们得到了上述错误,我们没有使用任何与非空相关的eclipse注释(我们所依赖的任何代码也没有)。似乎一个.filter(Objects::nonNull)表达式作为较长流链的一部分的简单存在导致了这个问题,这是一个明显的错误!