我需要帮助来理解Optional.orElse()方法的返回类型。 请看看下面的简单方法。它应该返回一个
String
。如果 arg
不为空,则 map
函数将 arg
更改为 toUpperCase
并返回 Optional
对象。那么在这种情况下这个Optional
对象是如何变成String
的呢?因为这个方法没有编译错误。这是orElse()
做的吗?因为如果我删除 orElse(),它会显示返回类型未匹配错误。改变数据类型背后的魔力是什么?
private String process(String arg) {
return Optional.ofNullable(arg).map(String::toUpperCase).orElse("value from orElse");
}
我真的很困惑 orElse() 如何改变这里的返回类型。 orElse() 的确切返回类型是什么
表情
Optional.ofNullable(arg)
返回类型为
Optional<String>
的对象,如 Optional.ofNullable(T)
的 javadoc 中所定义,在本例中,泛型变量 T
的类型为 String
。
方法调用
.map(String::toUpperCase)
在
Optional<String>
对象上将返回一个 Optional<String>
对象。这是在 Optional.map()
的 javadoc 中定义的。在这种特殊情况下,通用变量 T
仍然是 String
类型,并且此特定方法的新通用变量 U
也是 String
,因为被调用的方法 (String.toUpperCase()
) 是返回 String
。
最终方法调用
.orElse("value from orElse")
将“终止”或“消耗”
Optional<String>
实例。它将返回 Optional<String>
实例内的值(这是原始值,但大写),或者返回给定的后备值 "value from orElse"
,如 Optional.orElse()
的 javadoc 中指定。
因此,您有以下类型:
Optional<String> - from ofNullable()
Optional<String> - from map()
String - from orElse()