使用Optional代替空检查

问题描述 投票:0回答:3

我必须检查对象的属性是否为空。根据上述检查,我必须更新同一对象中的另一个属性。是否可以使用Optional类及其方法来代替null检查?

if(userData.getSubscription()==null){
    userData.setFees(Enum.ZERO);
} else {
    userData.setFees(Enum.HUNDRED);
}

让我知道是否可以使用 Java 8 可选类或其他功能将其替换为一行。

java null option-type
3个回答
0
投票

也许你想要:

userData.setFees(Objects.isNull(userData.getSubscription()) ? Enum.ZERO : Enum.HUNDRED)


0
投票

你可以做类似的事情

Optional::ofNullable(userData.getSubscription()).map(any -> Enum.HUNDRED).orElse(Enum.ZERO);

但是我认为这比@T.J 没有多大好处。克劳德的评论中的建议

userData.getSubscription() == null ? Enum.ZERO : Enum.HUNDRED

0
投票

Optional
的主要用途是防止您忘记检查
null
。因此,只有从
Optional
返回
getSubscription()
类型时它才有用。那么你可以这样做:

userData.setFees(userData.getSubscription().map(x -> Enum.HUNDRED).orElse(Enum.ZERO));

但是如果您不能或不想将

getSubscription()
更改为返回
Optional
,那么这里使用
Optional
就没有意义。只需这样做:

userData.setFees(userData.getSubscription() == NULL ? Enum.ZERO : Enum.HUNDRED);

顺便说一句,如果

Enum.ZERO
Enum.HUNDRED
只是代表 0 和 100 的名称,那么这不是一个好主意。 “零”和“百”这两个词就像数字 0 和 100 本身一样是一个“神奇的数字”。您应该将枚举命名为具有描述性的名称,例如“FREE_OF_CHARGE”和“FULL_PRICE”。

© www.soinside.com 2019 - 2024. All rights reserved.