我在下面的代码中尝试过从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。