如何在Java方法中使用.or和.orElseThrow

问题描述 投票:0回答:1

甚至可以在其中添加更多方法

findbyId(id).orElseThrow(() -> new BusinessException("bug"));

而不仅仅是异常? 所以类似

.orElseThrow(() -> { //do something here new BusinessException("bug") });

或者使用“.or”方法,我可以在其中放置更多方法,我不需要异常。所以如果不存在那么 //做这个 // 还有这个

因为使用经典方法,您将实体添加为可选,然后检查条件是否存在,如果不存在,您可以在 else{} 中做更多事情

java jpa findby
1个回答
0
投票

我不确定我是否正确理解您的意思,并假设您想向

orElseThrow
添加额外的逻辑。

orElseThrow
总是抛出异常,并且该异常是从 lambda 中获取的。

如果您想在抛出异常之前添加功能,请确保返回它:

yourOptional
    .orElseThrow(() -> {
        //additional logic possible here
        //will be executed if optional is empty
        return new YourException();
    });

但是,如果您想添加决定是否抛出异常的逻辑,则可以使用

or
映射到包含要返回的值的可选值,如果您想抛出异常,则返回值为空。然后,使用
orElseThrow

yourOptional
    .or(() -> {
        //additional logic possible here
        //will be executed if optional is empty
        if(shouldThrow()){
            return Optional.empty();
        }
        return Optional.of(someValue);
    })
    .orElseThrow(() -> {
        return new YourException();
    });
© www.soinside.com 2019 - 2024. All rights reserved.