Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当嵌套的lambda无法到达最内部的作用域时,如何引发异常?_Java_Lambda - Fatal编程技术网

Java 当嵌套的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

我想嵌套一些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 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()){
抛出新的非法状态异常();
}