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


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