Java 番石榴的选修课对NPE有什么帮助?

Java 番石榴的选修课对NPE有什么帮助?,java,guava,optional,Java,Guava,Optional,我被要求更喜欢使用可选类来避免空指针异常,但我不确定它会有什么显著的帮助,因为无论如何,我们仍然必须应用检查Optional.isPresent(),以避免像空检查一样出现异常 除非我们使用optional.or()来覆盖一些默认值,或者在大多数情况下使用空对象,否则我看不出它是非常有用的 是否还有我没有看到的其他好处,否则这可以很容易地避免,而不会产生任何额外的开销?通过从方法返回optional,您可以强制客户机执行显式检查 只要你是唯一一个使用你的方法并记住空检查的人,一切都很好 但是现在

我被要求更喜欢使用可选类来避免空指针异常,但我不确定它会有什么显著的帮助,因为无论如何,我们仍然必须应用检查
Optional.isPresent()
,以避免像空检查一样出现异常

除非我们使用
optional.or()
来覆盖一些默认值,或者在大多数情况下使用空对象,否则我看不出它是非常有用的


是否还有我没有看到的其他好处,否则这可以很容易地避免,而不会产生任何额外的开销?

通过从方法返回optional,您可以强制客户机执行显式检查

只要你是唯一一个使用你的方法并记住空检查的人,一切都很好

但是现在假设我正在使用您的API—我怎么知道您的方法是否可以返回null?当然,不必阅读javadoc。
如果我将Optional视为返回类型,我完全知道这种情况可能发生,我可以做出反应。

通过从方法返回Optional,您可以强制客户机对缺少的值执行显式检查

只要你是唯一一个使用你的方法并记住空检查的人,一切都很好

但是现在假设我正在使用您的API—我怎么知道您的方法是否可以返回null?当然,不必阅读javadoc。
如果我将Optional视为返回类型,我完全知道这种情况可能会发生,我可以做出反应。

通过从方法返回Optional,您可以强制客户端执行显式检查。但我仍然可以在不进行检查的情况下调用Optional.get(),它将抛出IllegalStateException而不是NullPointerException!但是您必须调用
get
这一事实提醒您应该选中
isPresent
。如果没有
Optional
选项,您很可能只是在假设一切正常的情况下编写代码。通过从方法返回Optional,您可以强制客户端执行显式检查。但我仍然可以在不检查的情况下调用Optional.get(),它将抛出IllegalStateException而不是NullPointerException!但是您必须调用
get
这一事实提醒您应该选中
isPresent
。如果没有
Optional
选项,您很可能只是在假设一切正常的情况下编码,而实际情况可能并非如此。