我希望嵌套一些lambdas,如果未达到最内层范围,则抛出异常。怎么办呢?
boolean someError = true;
procA(new Object()).ifPresent(a -> {
procB(a).ifPresent(b -> {
System.out.println(a);
System.out.println(b);
// Can't do this: "Local variable someError in an enclosing scope must
// be final or effectively final"
someError = false;
});
});
if (someError)
throw new RuntimeException("Some error!");
不同之处在于允许嵌套ifPresent()
。仍然不允许使用get()
以避免在无法检查可选的isPresent()的值时是否存在潜在的运行时异常。
答案 0 :(得分:0)
我完全相信你正在使用错误的方法来做你想做的事情。一般来说,争论java中的方法是否应该返回Optionals。我相信它们只应该在一个完全避免null的项目中。
在不知道procA和procB究竟发生了什么的情况下,很难推断重构这个更好。我的猜测是procA和procB之间的封装和抽象并不理想。
如果没有更大的重构,这可能会使它工作:
Optional<ReturnOfProcB> result = procA(paramA).map(this::procB);
if(!result.isPresent()) {
throw new IllegalStateException();
}