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,则您的可选抛出异常,并且 rezInfo.getOsobaId() == osobaId 为 true 则发生异常。
当您删除过滤器时,它不会抛出异常,因为您的 rezInfo 不为空。
另一种选择可能是在调用者方法中处理可选。
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"));
}
关于java - 可选接口(interface)问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51981850/