Guava Optional和@NonNull注释

时间:2015-01-08 13:35:44

标签: java guava optional non-nullable jsr305

我尝试了在代码中摆脱NPE的不同方法。我在Eclipse中使用nullness分析,我非常喜欢@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 个答案:

答案 0 :(得分:0)

此问题的完整解决方案需要在Optional API中使用null注释。特别是()应声明返回@NonNull。

在库作者注释其API之前,您将需要外部注释,正在为Eclipse Mars开发支持。 见https://wiki.eclipse.org/JDT_Core/Null_Analysis/External_Annotations

OTOH,我很好奇,为什么你们确实想要将NPE避免的两个概念合并到一个项目中。

答案 1 :(得分:0)

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

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