如果不是 null ,我有一个 BigDecimal 量我想要转换为 Long 但是我得到了 java.lang.NullPointerException 异常:
null
BigDecimal
Long
java.lang.NullPointerException
BigDecimal bgAmount = getAmount(); long totalSupplyFilterMin = Optional.ofNullable(bgAmount.longValue()).orElse(Long.MIN_VALUE);
如果 bgAmount 是 null ,则在其上调用 longValue 将导致 NullPointerException . 请注意,这与可选项无关,因为在您应用可选项之前调用它 .
bgAmount
longValue
NullPointerException
相反,您可以调用 map 来安全地应用此转换:
map
long totalSupplyFilterMin = Optional.ofNullable(bgAmount).map(BigDecimal::longValue).orElse(Long.MIN_VALUE);
不要...使用 Optional 进行什么是空检查 . 只需明确检查 null 然后取消引用该对象,如果它不为null .
Optional
BigDecimal bgAmount = getAmount(); long totalSupplyFilterMin = Long.MIN_VALUE; if(bgAmount != null) { totalSupplyFilterMin = bgAmount.longValue(); }
You use Optional as a return value to indicate the absence of a value.它不是空检查的替代品 .
通常我们在代码库中有一个模式,类似于下面的代码,但在这种情况下Makoto's answer没有太大的不同:
long totalSupplyFilterMin = Long.MIN_VALUE; BigDecimal bgAmount; if ((bgAmount = getAmount()) != null) { totalSupplyFilterMin = bgAmount.longValue(); }
你读变量 bgAmount 的次数唯一不同,这段代码读了一次,而不是上面的两次答案(这是非常重要的,如果有的话 - 但我养成了写这样的代码的习惯) .
首先,你错误地使用 Optional . 当 bgAmount == null 时, Optional.ofNullable(bgAmount.longValue()) 抛出 NPE . 正确的用法是:
bgAmount == null
Optional.ofNullable(bgAmount.longValue())
NPE
Optional.ofNullable(bgAmount) .orElse(BigDecimal.valueOf(Long.MIN_VALUE)) .longValue();
要么
Optional.ofNullable(bgAmount) .map(BigDecimal::longValue) .orElse(Long.MIN_VALUE);
似乎 bgAmount 为null所以在调用 bgAmount.longValue() 时会出现异常 .
bgAmount.longValue()
long totalSupplyFilterMin = Optional.ofNullable(bgAmount.longValue()) .orElse(Long.MIN_VALUE);
顺便说一句,这里不使用 ofNullable ,因为 bgAmount.longValue() 永远不会为空 .
ofNullable
你可能想做:
Optional.ofNullable(bgAmount).map(s -> s.longValue()).orElse(Long.MIN_VALUE);
5 回答
如果
bgAmount
是null
,则在其上调用longValue
将导致NullPointerException
. 请注意,这与可选项无关,因为在您应用可选项之前调用它 .相反,您可以调用
map
来安全地应用此转换:不要...使用
Optional
进行什么是空检查 . 只需明确检查null
然后取消引用该对象,如果它不为null .You use Optional as a return value to indicate the absence of a value.它不是空检查的替代品 .
通常我们在代码库中有一个模式,类似于下面的代码,但在这种情况下Makoto's answer没有太大的不同:
你读变量
bgAmount
的次数唯一不同,这段代码读了一次,而不是上面的两次答案(这是非常重要的,如果有的话 - 但我养成了写这样的代码的习惯) .首先,你错误地使用
Optional
. 当bgAmount == null
时,Optional.ofNullable(bgAmount.longValue())
抛出NPE
. 正确的用法是:要么
似乎
bgAmount
为null所以在调用bgAmount.longValue()
时会出现异常 .顺便说一句,这里不使用
ofNullable
,因为bgAmount.longValue()
永远不会为空 .你可能想做: