Java 当嵌套的lambda无法到达最内部的作用域时,如何引发异常?
我想嵌套一些lambda,如果未到达最内部的作用域,就会抛出异常。如何做到这一点Java 当嵌套的lambda无法到达最内部的作用域时,如何引发异常?,java,lambda,Java,Lambda,我想嵌套一些lambda,如果未到达最内部的作用域,就会抛出异常。如何做到这一点 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 i
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()的值是否失败时出现潜在的运行时异常。我完全相信您在尝试执行的操作中使用了错误的方法。一般来说,java中的方法是否应该返回Optionals存在争议。我认为只有在完全避免null的项目中,才应该这样做
如果不知道procA和procB中到底发生了什么,很难对其进行更好的重构。我的猜测是,procA和procB之间的封装和抽象并不理想
以下是在不进行更大重构的情况下使其工作的方法:
Optional<ReturnOfProcB> result = procA(paramA).map(this::procB);
if(!result.isPresent()) {
throw new IllegalStateException();
}
可选结果=procA(paramA).map(this::procB);
如果(!result.isPresent()){
抛出新的非法状态异常();
}