是否可以使用 Optional.ofNullable 检查是否为空并分配默认值

And*_*897 5 java optional java-8

我的代码从数据库读取一些配置值。如果它们未定义(由 getValueFromDB 方法返回 null),我想将它们默认为配置文件中定义的值。

是否可以Optional.ofNullable().OrElse()用于所有出现的getValueFromDB()空检查并在为空的情况下分配默认值。或者这会是滥用/滥用Optional吗?

ajb*_*ajb 3

这似乎是一种小小的虐待,但我对此并不强烈。也许如果有足够多的程序员开始这样做,它就会成为一种被接受的习惯用法。

但你可以做同样的事情而不使用Optional

public static <T> T useValueOrDefault(T value, T defaultValue) {
    return (value == null) ? defaultValue : value;
}
Run Code Online (Sandbox Code Playgroud)

并在各处使用此方法而不是Optional.ofNullable(value).orElse(default). (注:未测试

我确实发现实现此目的的内置构造(例如||Javascript 或?:Kotlin 中的构造)非常有用。太糟糕了,Java 没有等效的东西(编辑:根据 @Holger 的评论,Java 9 已经引入了一个)。

  • 从 Java 9 开始,[存在这种方法](https://docs.oracle.com/javase/9​​/docs/api/java/util/Objects.html#requireNonNullElse-TT-)。但请注意语义差异:如果两个参数都是“null”,“Objects.requireNonNullElse”将抛出“NullPointerException”,而不是默默地处理“null”结果(因为保证非“null”结果是主要目的)。 (6认同)