Optional.orElse() 改变返回类型?

问题描述 投票:0回答:1

我需要帮助来理解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() 的确切返回类型是什么

java java-8
1个回答
1
投票
  1. 表情

    Optional.ofNullable(arg)
    

    返回类型为

    Optional<String>
    的对象,如
    Optional.ofNullable(T)
    的 javadoc 中所定义,在本例中,泛型变量
    T
    的类型为
    String

  2. 方法调用

    .map(String::toUpperCase)
    

    Optional<String>
    对象上将返回一个
    Optional<String>
    对象。这是在
    Optional.map()
    的 javadoc 中定义的。在这种特殊情况下,通用变量
    T
    仍然是
    String
    类型,并且此特定方法的新通用变量
    U
    也是
    String
    ,因为被调用的方法 (
    String.toUpperCase()
    ) 是返回
    String

  3. 最终方法调用

    .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()
 
© www.soinside.com 2019 - 2024. All rights reserved.