通过Optional flatmap返回值时处理异常

时间:2017-12-05 19:37:14

标签: java optional

我在下面的代码中尝试过从JAVA实现Optional。 getOrders()方法抛出一个KException。

    @Override
    public Optional<List<Order>> getPendingOrders(AuthDTO authDTO) throws MyException {
        List<Order> orders=null;
        try {
            Optional<KConnect> connection = connector.getConnection(authDTO);
            if (connection.isPresent()) {
                orders = connection.get().getOrders();
            }
        }catch (KException e){
            throw new MyException(e.message,e.code);
        }
        return Optional.ofNullable(orders);
    }

我尝试删除isPresent()检查并将其替换为flatmap。

    @Override
    public Optional<List<Order>> getPendingOrders(AuthDTO authDTO) throws MyException {
        return connector.getConnection(authDTO).map(p -> {
            try {
                return p.getOrders();
            } catch (KException e) {
                throw new MyException(e.message,e.code); // [EXP LINE]
            }
        });
    }

在这种情况下,我无法捕获KException并将其转换为MyException。我的代码无法编译。

unreported exception com.myproject.exception.MyException; must be caught or declared to be thrown

第一段代码对我来说非常好。有一个更好的方法吗?请建议。

编辑:如果我将其设为地图而不是flatmap,则不会更改。 确切的问题是IntelliJ在[EXP LINE]处说unhandled exception: com.myproject.exception.MyException,即使该方法已经抛出MyExpception。

0 个答案:

没有答案