根据条件声明一个final变量并在java中的lambda中使用它

tus*_*shR 2 java lambda

我有以下场景。

我想在 lambda 表达式中使用变量。但是这个变量将根据条件具有一次性值(最终)。

  final String constraintsAmount;
  if(constraint.isPresent()) {
       constraintsAmount = constraint.getValue();
  }
Run Code Online (Sandbox Code Playgroud)

之后,我开始使用 forEach + lambda 表达式迭代列表。现在我必须constraintsAmount在这次迭代中使用这个字段。

但它说“constraintsAmount可能尚未初始化”。

我该如何解决这个问题。

笔记 :

  1. 我不想将此变量声明为实例变量,并且我当然不想在迭代内声明和初始化此变量。
  2. 因为它是最终的,所以我无法初始化它,然后在 if 检查中重用它。所以想检查一下解决办法。

Mar*_*ace 5

从编译器的角度来看,您需要一个 else 块:

final String constraintsAmount;
  if(constraint.isPresent()) {
    constraintsAmount = constraint.getValue();
  } else {
    constraintsAmount = ...
  }
Run Code Online (Sandbox Code Playgroud)

三元运算符更好:

final String constraintsAmount = constraint.isPresent() ? constraint.getValue() : ...
Run Code Online (Sandbox Code Playgroud)

注意:在 Java 8 中,您不需要声明变量final即可在“闭包”(在 lambda 内部)中使用它。

或者也许您可能需要完全重新设计您的代码。很难说,因为我没有足够的信息。