简明地将Optional.absent()值传递给方法

使用Guava的Optional类型作为方法参数的一个问题是你不能简单地写

 // method declaration public void foo(Optional arg); // compiler error foo(Optional.absent()); 

由于类型推断失败,但必须明确添加类型:

 // real method call foo(Optional. absent()); 

我怎么能避免呢?

如果您正在处理一小组Optional<>类型(例如,主要是字符串或少数其他类型),只需创建一些帮助方法为您绑定类型参数:

 public final class AbsentValues { public static Optional absentString() { return Optional.absent(); } } 

您甚至可以静态导入这些代码以获得更清晰的代码:

 import static AbsentValues.*; ... foo(absentString()); 

对于不太常见的Optional<>类型,只需显式指定type参数即可。 它可能不漂亮,但它是正确的。

所以,这是做到这一点的正确方法。 如果没有其他任何东西,让我至少在这里展示它以供我自己将来参考,对于每个不读问题的人,比如我自己:)感谢ColinD(和Alexey)。

 foo(Optional.absent()) 

就在写这个问题时,我想到了

 public class GuavaConstants { @SuppressWarnings( { "raw" }) public static final Optional ABSENT = Optional.absent(); // similar for empty ImmutableList, etc. } 

然后电话看起来像

 @SuppressWarnings( { "unchecked" }) foo(GuavaConstants.ABSENT); 

有更好的方法吗?