有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java可选接口问题

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)

我有例外,但雷津福。getOsobaId()==81504(我在调试器中看到)

当我删除这行时:

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

函数返回对象RezerwacjaInfoDTO

这条线是什么意思


共 (1) 个答案

  1. # 1 楼答案

    如果变量rezInfo为null,那么可选的异常也会引发rezInfo。getOsobaId()==osobaId为真,则发生异常

    当你移除过滤器时,它不会抛出异常,因为你的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"));
    }