提问者:小点点

番石榴可选和@NonNull注释


我正在尝试不同的方法来消除代码中的NPE。我在Eclipse中使用空性分析,我非常喜欢@NonNullByDefault。但今天我遇到了一个关于番石榴的问题:

private static Optional<Foo> bar() {
  Foo foobar = new Foo();
  return Optional.of(foobar);
}

我在返回行上得到以下评论:

Null type safety: The expression of type 'Optional<Foo>' needs unchecked conversion to conform to   '@NonNull Optional<Foo>'

我尝试使用JSR305注释,但没有效果。是否有方法使其工作(同时使用Optional和@NonNull注释)?


共2个答案

匿名用户

这个问题的完整解决方案需要可选API中的空注释。尤其是()应该声明为返回@NonNull。

在库作者注释他们的API之前,您将需要外部注释,对外部注释的支持正在为Eclipse Mars开发中。参见https://wiki . eclipse . org/JDT _ Core/Null _ Analysis/External _ Annotations

OTOH,我很好奇,为什么你确实希望在一个项目中结合两个避免NPE的概念。

匿名用户

Guava代码将非空视为默认值,但它不使用Eclipse的@NonNullByDefault注释,因为它是非标准的。相反,它使用标准的@Nullable注释来指示参数和返回可以为null的类型。

令人敬畏的Error Prone项目提供了与这种标准方法兼容的空安全检查——我建议使用它而不是IDE的自定义检查。