java - 如何从java8中的ifpresent返回进行Optional<T>空指针检查?

标签 java nullpointerexception option-type

我有这个不安全的代码,可能会引发 nullPtr 异常:

Type t = objParam.getProject().getType();

如何使用 java 8 可选和 ifpresent() 安全地返回最少量的代码(一行)?

// How can I modify this  to return from the ifPresent()...or a better way in 
// java8?  how can I just return a string from the ifPresent() method?
// instead of on a separate if(...isPresent) <make the assignment>?
//
Optional<Obj> obj = Optional.ofNullable(objParam);
Optional<String> typeName = obj
.map(Project::getProject)
.map(Type::getType).ifPresent().getName(); // ??? how to get the type name ???

最佳答案

Optional.map 的功能是它返回一个 Optional,仅当原始变量也 isPresent 时该值才具有值。所以我怀疑你只是想要:

obj.map(Obj::getProject).map(Project::getType).map(Type::getName);

请注意,ifPresent 具有完全不同的目的:它允许消费者仅在值存在时接受值。所以对于类似的事情:

...map(Type::getName).ifPresent(System.out::println);

关于java - 如何从java8中的ifpresent返回进行Optional<T>空指针检查?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28800691/

相关文章:

android - 新 Activity 空指针异常

java - 这行java代码有什么问题吗?

scala - 到底是什么让 Option 成为 Scala 中的 monad?

Java8 泛型拼图

带有自动装箱的三元运算符中的Java NPE?

带有函数链接表达式的 Java8 可选

java - 在 AspectJ set-pointcut 中公开先前的值

java - Mockito - 模拟遗留类构造函数

java - 在 android canvas 上绘制一堆旋转的矩形

java - Optaplanner VRP 从工作解决方案中移除客户