I am new to Java8. In recent project I am trying Optional with map and flatmap to prevent NPE.
我尝试使用可选的map和flatmap,但是当我使用flatMap时,编译器给出了错误。
public class Project {
private ApplicationType applciationType;
}
@Getter
@Setter
public class ApplicationType {
public String getDirectory() {
return "Inside my directory";
}
}
public class Driver {
public static void main(String[] args) {
ApplicationType appType = new ApplicationType();
Project project = new Project(appType);
//When using map its running fine.
Optional.ofNullable(project)
.map(prjct-> prjct.getApplciationType())
.map(appType1 -> appType1.getDirectory())
.ifPresent(e -> System.out.println(e));
//When using flatMap.. comiplation error.
Optional.ofNullable(project)
.map(prjct-> prjct.getApplciationType())
.flatMap(appType1 -> appType1.getDirectory())
.ifPresent(e -> System.out.println(e));
}
}
对不起,如果我在这里缺少一些基本知识。 只是尝试在未来的项目中学习和实现Java8功能。
我得到的编译错误-> [无法推断flatMap(Function>)的类型参数]
答案 0 :(得分:0)
Optional.flatMap()
的目的是从功能中解开Optional
。
例如,如果您的getDirectory
返回Optional<String>
,则.map()
调用会给您Optional<Optional<String>>
,但是如果您使用flatMap()
-它会给您Optional<String>
。
答案 1 :(得分:0)
请参阅flatMap
的签名:
public<U> Optional<U> flatMap(Function<? super T, Optional<U>> mapper)
Function
应该返回一个Optional
,因此要使用它,您需要编写:
Optional.ofNullable(project)
.map(prjct-> prjct.getApplciationType())
.flatMap(appType1 -> Optional.ofNullable(appType1.getDirectory()))
.ifPresent(e -> System.out.println(e));
当然,在此示例中,使用map
更有意义(就像在您的第一个摘要中一样,它通过了编译)。