我必须检查对象的属性是否为null。根据上面的检查,我必须更新同一对象中的另一个属性。是否可以使用Optional类及其方法来替换null检查?
if(userData.getSubscription()==null){
userData.setFees(Enum.ZERO);
} else {
userData.setFees(Enum.HUNDRED);
}
让我知道这是否可以用一行使用Java8Optional类或其他功能来替换。
也许您想要:userData.setFees(Objects.isNull(userData.getSubscription()) ? Enum.ZERO : Enum.HUNDRED)
你可以做一些类似的事情
Optional::ofNullable(userData.getSubscription()).map(any -> Enum.HUNDRED).orElse(Enum.ZERO);
然而,我认为这对@t.J.Crowder在评论中的建议没有多大好处
userData.getSubscription() == null ? Enum.ZERO : Enum.HUNDRED
Optional
的主要用途是防止您忘记检查null
。因此,只有从getSubscription()
返回Optional
类型时才有用。然后你可以做:
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的名称,那么这不是一个好主意。单词";ZERO";以及";一百";同样是一个";幻数";作为数字0和100本身。你应该给你的枚举命名一些描述性的东西,比如";FREE_OF_CHARGE";以及";FULL_PRICE";。