Local variable flag defined in an enclosing scope must be final or effective


轉載 原文鏈接:https://blog.csdn.net/weixin_38883338/java/article/details/89195749

Java8在 lambda 表達式中使用局部變量會提示:Local variable flag defined in an enclosing scope must be final or effectively final

這是因為你使用的局部變量在初始化后,又對這個變量進行了賦值。賦值后會認為這個變量不是final了,所以報錯,針對這個問題可以有以下幾種解決辦法。

法一:

List<String> list = new ArrayList<String>();
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會認為這個新的變量是final,沒有變化的,可以使用。

法二:

List<String> list = new ArrayList<String>();
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);
}
});
將你需要的值放到一個數組里,也可以使用。

此外放到map或是list里都可以



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM