我有以下场景。
我想在 lambda 表达式中使用变量。但是这个变量将根据条件具有一次性值(最终)。
final String constraintsAmount;
if(constraint.isPresent()) {
constraintsAmount = constraint.getValue();
}
Run Code Online (Sandbox Code Playgroud)
之后,我开始使用 forEach + lambda 表达式迭代列表。现在我必须constraintsAmount在这次迭代中使用这个字段。
但它说“constraintsAmount可能尚未初始化”。
我该如何解决这个问题。
笔记 :
从编译器的角度来看,您需要一个 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 内部)中使用它。
或者也许您可能需要完全重新设计您的代码。很难说,因为我没有足够的信息。