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

2022-09-02 04:51:28

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

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

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

由于类型推断失败,但必须显式添加类型:

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

我该如何避免?


答案 1

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

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

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

import static AbsentValues.*;

...

foo(absentString());

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


答案 2

因此,这是执行此操作的正确方法。如果不是为了别的什么,让我至少在这里展示它,供我自己将来参考,给每个不读问题的人,比如我自己:)感谢ColinD(和Alexey)。

foo(Optional.<String>absent())

推荐