【问题标题】:Value of Optional.of("xxxx") in Java Programming [closed]Java 编程中 Optional.of("xxxx") 的值 [关闭]
【发布时间】:2017-08-22 21:38:29
【问题描述】:

请考虑以下java代码:

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

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

【问题讨论】:

  • 我不明白。与什么相反?
  • 它“没用”..^^
  • 隔离的价值不大,但可能由于一些外部情况需要。
  • 与任何其他常量值相同,例如 "foo"1nullfalse。有什么问题?

标签: java java-8 optional


【解决方案1】:

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

例如假设您有一个返回 Optional<Integer> 的函数,您可以使用它来提供默认值:

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

您所指的工厂函数是 Optional 在被调用函数中的构造方式:

public Optional<Integer> getAge(){
    if(this.age == null)
         return Optional.empty();
    return Optional.of(this.age);
}

【讨论】:

  • 当然在你的例子中你可以使用Optional.ofNullable
  • 没错,但我想指出Optional.ofOptional.empty 之间的区别,并且太累了,想不出更好的例子:-)
【解决方案2】:

这完全是上下文相关的,如果没有上下文,任何人都无法真正说出。

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


某个方法是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&lt;String&gt; getErrorReason();。拥有一个始终表示错误的实现是完全合理的,然后从已知常量 String 显式设置 Optional 再次有助于避免创建大量实例。


我相信在很多时候这样做可能会很有用。

【讨论】:

    猜你喜欢
    • 2014-12-24
    • 2015-05-27
    • 1970-01-01
    • 2013-04-23
    • 2010-09-09
    • 1970-01-01
    • 2011-03-24
    • 2010-11-19
    • 1970-01-01
    相关资源
    最近更新 更多