我正在尝试不同的方法来消除代码中的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注释)?
这个问题的完整解决方案需要可选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的自定义检查。