无法理解关于 java 可选的这段代码
Not able to understand this piece of code regarding java Optional
我们可以在 Optional 上使用 map,根据我的理解,returns 对 Optional 包装的对象的方法调用的价值。如果我在这里错了,请纠正我!
映射 return 是内部方法调用产生的值,还是 return 包装在 Optional 中的值?
所以如果我有
Optional<T> optOfTypeT = Optional.ofNullable(objOfTypeT);
那么
的 return 类型是什么
optTypeT.map(t -> t.someOperationOnT());
return 类型是 T
还是 Optional<T>
类型?
假设我们有一个人class。
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 包装对象,而在第二次调用中得到一个字符串?
在 map 操作之后我们得到一个裸解包值并且没有它映射 returns 一个 Optional 包装对象的链接 orElse 是什么?
我的理解有什么不足之处,请指教!!
正如评论中提到的 "orElse" 命名有点糟糕。它的内部逻辑可以用 "getOrElseGet(...)" 之类的东西更好地描述,因为它隐式地尝试 return 可选中包含的值。
见java.util.Optional#orElse
:
public T orElse(T other) {
return value != null ? value : other;
}
根据方法 Java 文档 map(Function<? super T,? extends U> mapper)
If a value is present, apply the provided mapping function to it, and
if the result is non-null, return an Optional describing the result.
根据设计 Optional
表示值可能存在也可能不存在。如果不是,那么 map()
方法别无选择,只能 运行 输入 lambda 和 return 一个 Optional.empty()
我们可以在 Optional 上使用 map,根据我的理解,returns 对 Optional 包装的对象的方法调用的价值。如果我在这里错了,请纠正我!
映射 return 是内部方法调用产生的值,还是 return 包装在 Optional 中的值?
所以如果我有
Optional<T> optOfTypeT = Optional.ofNullable(objOfTypeT);
那么
的 return 类型是什么optTypeT.map(t -> t.someOperationOnT());
return 类型是 T
还是 Optional<T>
类型?
假设我们有一个人class。
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 包装对象,而在第二次调用中得到一个字符串?
在 map 操作之后我们得到一个裸解包值并且没有它映射 returns 一个 Optional 包装对象的链接 orElse 是什么?
我的理解有什么不足之处,请指教!!
正如评论中提到的 "orElse" 命名有点糟糕。它的内部逻辑可以用 "getOrElseGet(...)" 之类的东西更好地描述,因为它隐式地尝试 return 可选中包含的值。
见java.util.Optional#orElse
:
public T orElse(T other) {
return value != null ? value : other;
}
根据方法 Java 文档 map(Function<? super T,? extends U> mapper)
If a value is present, apply the provided mapping function to it, and if the result is non-null, return an Optional describing the result.
根据设计 Optional
表示值可能存在也可能不存在。如果不是,那么 map()
方法别无选择,只能 运行 输入 lambda 和 return 一个 Optional.empty()