可选和同时铸造

Nuñ*_*ada 8 java bigdecimal optional java-8

如果不是,我有一个BigDecimal我想要投射的金额,但我做了一个例外:Longnulljava.lang.NullPointerException

BigDecimal bgAmount = getAmount();

long totalSupplyFilterMin = 
              Optional.ofNullable(bgAmount.longValue()).orElse(Long.MIN_VALUE);
Run Code Online (Sandbox Code Playgroud)

Mak*_*oto 7

不要...使用一个Optional什么是空检查.只是明确检查null,并随后取消引用对象,如果它不为空.

BigDecimal bgAmount = getAmount();
long totalSupplyFilterMin = Long.MIN_VALUE;
if(bgAmount != null) {
    totalSupplyFilterMin = bgAmount.longValue();
}
Run Code Online (Sandbox Code Playgroud)

您将其Optional用作返回值以指示缺少值.不是空检查的替代品.


ole*_*nik 5

首先你使用Optional不当.什么时候bgAmount == null,然后Optional.ofNullable(bgAmount.longValue())抛出NPE.正确的用法是:

Optional.ofNullable(bgAmount)
        .orElse(BigDecimal.valueOf(Long.MIN_VALUE))
        .longValue();
Run Code Online (Sandbox Code Playgroud)

要么

Optional.ofNullable(bgAmount)
                   .map(BigDecimal::longValue)
                   .orElse(Long.MIN_VALUE);
Run Code Online (Sandbox Code Playgroud)