Java <optional>对象是null还是对象的属性为null?

时间:2017-10-16 12:36:41

标签: java optional

我想将这个遗留的Java示例代码迁移到Java 8。

public String getUserSex(Person person) {
    if(person != null) {
        if(person.getSex() != null) {
            return person.getSex();
        }
    }

    return null;
}  

如何使用Optional将其迁移到Java 8?

2 个答案:

答案 0 :(得分:4)

使用Optional.ofNullableOptional.flatMap

public Optional<String> getUserSex(Person person)
{
    return Optional.ofNullable(person).flatMap(
        p -> Optional.ofNullable(p.getSex())
    );
}

答案 1 :(得分:0)

您可以按如下方式实施:

public Optional<String> getUserSex(Person person) {
    if(person != null) {
       return Optional.ofNullable(person.getSex());
    }
    return Option.empty();
} 

在这种情况下,getUserSex的调用者将始终获得一个类型Optional,因此调用者不得实现空检查。

相反,如果值存在,调用者可以询问Optional。

 getUserSex(new Person()).isPresent()