This question already has answers here:
How to properly compare two Integers in Java?
                            
                                (10个回答)
                            
                    
                2年前关闭。
        

    

RezerwacjaInfoDTO getRezerwacjaInfo(int rezerwacjaId) throws Exception {

    Integer osobaId = Math.abs(loginMgr.getLoggedUserInfo().getUserId());
    RezerwacjaInfoDTO rezInfo = rezMgr.getRezerwacjaInfo(rezerwacjaId);

    return Optional
            .ofNullable(rezInfo)
            .filter(rez -> rez.getOsobaId() == osobaId)
            .orElseThrow(() -> new Exception("Brak rezerwacji o podanym numerze"));
}


当我叫它:

getRezerwacjaInfo(81504)


我收到异常,但rezInfo.getOsobaId()== 81504(我在调试器中看到它)

当我删除此行时:

.filter(rez -> rez.getOsobaId() == osobaId)


函数返回对象RezerwacjaInfoDTO。

这条线怎么了?

最佳答案

如果变量rezInfo为null,则可选的throws异常也rezInfo.getOsobaId()== osobaId为true,则发生异常。

删除过滤器时,它不会引发异常,因为您的rezInfo不为null。

可能的另一种选择是处理调用方方法中的可选方法。

Optional<RezerwacjaInfoDTO> getRezerwacjaInfo(int rezerwacjaId) {

    Integer osobaId = Math.abs(loginMgr.getLoggedUserInfo().getUserId());
    RezerwacjaInfoDTO rezInfo = rezMgr.getRezerwacjaInfo(rezerwacjaId);

    return Optional
            .ofNullable(rezInfo);
}

void callerMethod() throws Exception {
    getRezerwacjaInfo(...)
            .filter(rez -> rez.getOsobaId() == osobaId)
            .orElseThrow(() -> new Exception("Brak rezerwacji o podanym numerze"));
}

10-08 14:57