囲んでいるスコープで定義されたローカル変数フラグは、最終的または事実上最終的でなければなりません



Local Variable Flag Defined An Enclosing Scope Must Be Final



Java8は、ラムダ式でローカル変数を使用してプロンプトを表示します。囲んでいるスコープで定義されたローカル変数フラグは、finalまたは実質的にfinalである必要があります。

これは、使用するローカル変数が初期化後にこの変数に割り当てられるためです。割り当て後、変数は最終ではないと見なされるため、エラーが報告されます。この問題にはいくつかの解決策があります。



法1:

List list = new ArrayList() list.add('name') list.add('age') list.add('address') boolean flag = true flag = false boolean newFlag = flag list.stream().forEach(e -> { if (newFlag) { System.out.println(e) } })

使用するローカル変数は使用前に新しい変数に割り当てられるため、java8は新しい変数が最終的なものであると見なし、変更はなく、使用できます。



法2:

List list = new ArrayList() list.add('name') list.add('age') list.add('address') boolean[] flag = {true} flag[0] = false list.stream().forEach(e -> { if (flag[0]) { System.out.println(e) } })

必要な値を配列に入れて使用します。

また、地図やリストに入れることができます