是否有可能通过检查对对象的引用而不是方法结果来使用可选的?

Is there possibility to use optional by checking reference to object instead of method result?

我有以下代码:

if(myObject != null){
    return myObject.foo();
}else{ 
    return "default";
}

我想使用 guava 中的 optional,但调用 foo() 会导致 NPE(因为 mObject 可能为 null)。 有谁知道怎么做或其他方法来避免 if 语句?

正如 Jon Skeet 指出的那样,您还没有说出您期望使用 Optional 的好处。

您将获得与原始代码相同的结果

return Optional.fromNullable(myObject)
        .transform(new Function<MyObject, String> {
            @Override
            public String apply(MyObject input) {
                return input.foo();
            }
        })
        .or("default");

或者,使用 Java 8 和 lambdas :

return Optional.fromNullable(myObject)
        .transform(MyObject::foo)
        .or("default");

如果您还没有 Optional<MyObject>,对于相同的最终结果来说,这有点令人费解。原始版本更简单,使用三元运算符的替代版本也是如此。