无法理解有关Java Optional的这段代码

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

我们可以在Optional上使用map,据我所知,它对Optional包装的对象返回方法调用的值。如果我错了,请纠正我!

假设我们有一个人班。

class Person{
       String name;

       Person(String name){
         this.name = name;
       }

       public String getName(){
          return this.name;
       } 
   }

    // Now the main class.

  class Main {
       Optional<Person> oPerson = Optional.nullable( personService.getPerson());
       Optional<String> oName = oPerson.map(p -> p.getName()); // I will get a String value wrapped in the Optional.

       System.out.println("It will not print a name" + oName);

       String name = oPerson.map(person -> person.getName()).orElse("anonymous");// I will get a String in return for this call, not an Optional object in return.     

       System.out.println("Name will be printed -->" + name);
   }

我是说为什么我们应该在第一个调用中得到一个Optional包装的对象,而在第二个调用中得到一个字符串?或者我的理解存在差距,请在这里说明一下。

java optional
2个回答
1
投票

如评论“ orElse”中提到的那样命名有点不好。它的内部逻辑最好用“ getOrElseGet(...)”之类的东西来描述,因为它隐式地尝试返回可选值中包含的值。

请参见java.util.Optional#orElse

public T orElse(T other) {
    return value != null ? value : other;
}

1
投票

根据方法map(Function<? super T,? extends U> mapper)的Java文档,>

如果存在值,则将提供的映射函数应用于它,然后如果结果为非null,则返回描述结果的Optional。

根据设计Optional表示可能存在或可能不存在值。如果不是这样,则map()方法别无选择,只能运行输入lambda并返回Optional.empty()

© www.soinside.com 2019 - 2024. All rights reserved.