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

The type org.eclipse.jdt.annotation.NonNull cannot be resolved. It is indirectly referenced from required .class files

当我将 Java 8 方法引用双冒号运算符 (::) 与新运算符(例如 MyType::new)一起使用时,我在 [=20= 的 Eclipse 中出现此错误] 工具套件(STS):

The type org.eclipse.jdt.annotation.NonNull cannot be resolved. It is indirectly referenced from required .class files

如何摆脱这个错误?

Stephan Herrmann 的评论中提供了错误描述。有 open Eclipse issue 让这个问题更加人性化。

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

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

Eclipse 有一个名为 annotation-based 空分析 的功能,它提供 compile-time 使用注释的检查(例如 @NonNull@Nullable).当类路径中缺少注释时会出现此错误。

如果您不打算使用 annotation-based 空值分析 功能,您可以在 Eclipse 中禁用它。

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

我已经通过更改 "Use default annotation for null specifications"

解决了它

我已经输入了两个class名字:

javax.annotation.Nonnull
javax.annotation.Nullable

我能够通过添加@NonNull 注释来解决这个问题。它带有红色下划线,因为 Eclipse 注释不存在。将鼠标悬停在 @NonNull 上让我可以选择“修复项目设置 ...”,这清除了错误。然后我删除了@NonNull.