Optional的用法疑惑,发现并没有达到的预期结果

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

@Data
public class PersonT {
    private Optional<CarT> car;
}

@Data
public class CarT {
    private String name;
    private Optional<InsuranceT> 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<CarT> 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<InsuranceT> 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);
            }
}

PersonT 对象的 car 属性和 CarT 的 insurance 属性为null

if-elif-else在optional语义上应该还不支持。或者说Optional本身的设计就不是为了替换if-else ? 只是为了解决NPE问题。optional.ofnullable().orelse 本质上应该是赋值操作,而非替代if-else。而Optional.ifPresent应该是较片面的if(因为他只支持是否为空,不支持复杂条件)。