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

时间:2012-08-01 11:09:11

标签: java generics guava

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

// method declaration
public void foo(Optional<String> arg);

// compiler error
foo(Optional.absent());

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

// real method call
foo(Optional.<String> absent());

我该如何避免呢?

3 个答案:

答案 0 :(得分:7)

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

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

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

import static AbsentValues.*;

...

foo(absentString());

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

答案 1 :(得分:-1)

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

foo(Optional.<String>absent())

答案 2 :(得分:-4)

在撰写问题时,我想到了

public class GuavaConstants {
    @SuppressWarnings( { "raw" })
    public static final Optional ABSENT = Optional.absent();

    // similar for empty ImmutableList, etc.
}

然后调用看起来像

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

有更好的方法吗?