NullPointerException с получателем на Long, но не с BigDecimal

Это мой первый вопрос после многих лет использования этого замечательного форума и, следовательно, в первый раз я не нашел ответа на свой вопрос:(

Я получаю странное поведение, работая с BigDecimal а также Long: для первого я не получаю NullPointerException но я делаю со вторым.

Мой код выглядит следующим образом:

if (aggregate != null) {
    existingAggregates.setAmtExpect((aggregate.getAmtRecv());

    existingAggregates.setNbTrxExpect(aggregate.getNbTrxRecv());
}

Там, где aggregate и существующие Aggregates имеют одинаковый тип объекта Aggregate (я сократил исходный класс, но на самом деле это сущность Hibernate (если нужна полная версия, держите меня в курсе:)

public class Aggregate implements Serializable {

    private BigDecimal amtExpect;

    private Long nbTrxExpect;

    public BigDecimal getAmtExpect() {
        return amtExpect;
    }

    public void setAmtExpect(BigDecimal amtExpect) {
        this.amtExpect = amtExpect;
    }

    public Long getNbTrxExpect() {
        return nbTrxExpect;
    }

    public void setNbTrxExpect(Long nbTrxExpect) {
       this.nbTrxExpect = nbTrxExpect;
    }

}

Моя проблема возникает, когда агрегат не является нулевым, но когда два члена amtExpect а также nbTrxExpect являются нулевыми

Все хорошо с getAmtRecv() но NullPointerException брошен с getNbTrxRecv(),

Я бы понял, если бы оба бросили NPE, но я действительно не понимаю, почему это происходит только с длинным членом: s

Я искал форум, но не мог найти хорошего объяснения для меня. Это из-за автобокса или что-то в этом роде? Я потерялся...

В любом случае, чтобы запустить этот код, я изменил его, как показано ниже:

if (aggregate != null) {
    existingAggregates.setAmtExpect((aggregate.getAmtRecv() != null) ? aggregate.getAmtRecv() : BigDecimal.ZERO);

    existingAggregates.setNbTrxExpect((aggregate.getNbTrxRecv() != null) ? aggregate.getNbTrxRecv() : BigDecimal.ZERO.longValue());
}

Это работает, но я все еще не понимаю, что происходит с первой версией моего кода.

Большое спасибо,
Noshitheel

0 ответов

Другие вопросы по тегам