Optional.of(" xxxx")在Java编程中的价值

时间:2017-08-22 21:38:30

标签: java java-8 optional

请考虑以下java代码:

Optional.of("some.constant.value")

当参数是常量时,如何使用任何值的Optional.of()

2 个答案:

答案 0 :(得分:1)

可选通常用作函数的返回值,该函数可能返回值,也可能不返回值。这是一种避免处理空值的技术。

E.g。假设您有一个返回clearInterval(timerId); 的函数,您可以使用它来提供默认值:

Optional<Integer>

您要引用的工厂函数是如何在被调用函数中构造Optional:

int x = person.getAge().orElse(42);

答案 1 :(得分:1)

这完全是语境,如果没有这种背景,任何人都不可能真正说出来。

但是......有几次我看到这样的事情很有用(也许你可以确定哪一个与你的特定环境相关:

某个方法为Optional的接口。

interface PotentiallyLimited {
    OptionalInt getLimit();
}

class LimitedToTen implements PotentiallyLimited {
    private static final OptionalInt LIMIT = OptionalInt.of(10);

    @Override
    public final OptionalInt getLimit() {
        return LIMIT;
    }
}

在这种情况下,将变量存储为常量会使其每次都必须生成一个新实例。

一个类,其中某些依赖项将返回Optional,但可能不存在。

class Thing {
    private static final Optional<String> DEFAULT_PREFERENCE = Optional.of("blue");
    private final @Nullable PreferenceProvider provider;

    public void useDependency() {
        final Optional<String> preference;
        if (dependency != null) {
            preference = provider.getPreference();
        } else {
            preference = DEFAULT;
        }
        // Use the preference here...
    }
}

同样,将它作为常量表示您不需要在每次调用时创建新实例。

我见过的最后一个案例,说你有一些界面有boolean isError();和另外Optional<String> getErrorReason();。有一个总是代表错误的实现是完全合理的,然后再次从已知常量String显式设置Optional有助于避免创建大量实例。

我确信还有很多其他时间可能有用。