我必须检查对象的属性是否为空。根据上述检查,我必须更新同一对象中的另一个属性。是否可以使用Optional类及其方法来代替null检查?
if(userData.getSubscription()==null){
userData.setFees(Enum.ZERO);
} else {
userData.setFees(Enum.HUNDRED);
}
让我知道是否可以使用 Java 8 可选类或其他功能将其替换为一行。
也许你想要:
userData.setFees(Objects.isNull(userData.getSubscription()) ? Enum.ZERO : Enum.HUNDRED)
你可以做类似的事情
Optional::ofNullable(userData.getSubscription()).map(any -> Enum.HUNDRED).orElse(Enum.ZERO);
但是我认为这比@T.J 没有多大好处。克劳德的评论中的建议
userData.getSubscription() == null ? Enum.ZERO : Enum.HUNDRED
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”。