optional转化为set_Optional的用法疑惑,发现并没有达到的预期结果

最近在学习java的Optional,介绍中感觉Optional好强大,我根据教程写了案列,但是结果是我没有想到的。代码如下

@Data

public class PersonT {

private Optional car;

}

@Data

public class CarT {

private String name;

private Optional insurance;

}

@Data

public class InsuranceT {

private String name;

}

public static void main(String[] args) {

String name = Optional.of(new PersonT()).flatMap(PersonT::getCar)

.flatMap(CarT::getInsurance)

.map(InsuranceT::getName)

.orElse("Unknown");

System.out.println(name);

}

我发现执行了这段代码后并没有达到我的预想结果,我以为会返回”Unknown”,但是给我抛出了空指针异常,我想知道这是什么原因

问题补充……………………

其实看了教程写着上边的这种写法可以替换我下边的这种写法

if(personT != null) {

CarT carT = personT.getCar();

if(carT != null) {

InsuranceT insuranceT = carT.getInsurance();

if(insuranceT != null) {

return insuranceT.getName();

} else {

return "Unknown";

}

} else {

return "Unknown";

}

} else {

return "Unknown";

}

回答

要实现你的效果应该是这样的

class PersonT {

private CarT car;

public Optional getCar() {

return Optional.ofNullable(car);

}

public void setCar(CarT car) {

this.car = car;

}

}

class CarT {

private String name;

private InsuranceT insurance;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public Optional getInsurance() {

return Optional.ofNullable(insurance);

}

public void setInsurance(InsuranceT insurance) {

this.insurance = insurance;

}

}

class InsuranceT {

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

private String name;

}

public class demo {

public static void main(String[] args) {

String name = Optional.ofNullable(new PersonT()).flatMap(PersonT::getCar)

.flatMap(CarT::getInsurance)

.map(InsuranceT::getName)

.orElse("Unknown");

System.out.println(name);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值