關於java8 Lambda表達式使用 以及變量的使用限制 方法引用


一、Lambda表達式規則

  • 1、lambda表達式里只能引用被final 修飾的本地變量  ,這就是說不能在 lambda 內部修改定義在域外的局部變量,否則會編譯錯誤。
  • 2、局部變量可以不用聲明為 final,但是必須不可被后面的代碼修改(即隱性的具有 final 的語義)
  • 3、lambda表達式里不允許聲明一個與局部變量同名的參數或者局部變量。
     
               
    package com.ljg.test;

    import java.util.ArrayList;
    import java.util.List;

    public class LambdaTest02 {
    public static void main(String[] args){
    List<String> lists = new ArrayList<>();
    lists.add("陳天");
    lists.add("龍雲");
    int a = 10;
    //lambda表達式便利
    try {
    lists.forEach(l -> {
    String a = "霸道總裁";//規則第3條
    System.out.println("lambda里給 外部局部變量 自動加上了 final 修飾符" + a);//規則第2條,隱式標記為 final常量
    lists.add("寧曉曉");//快速失敗,報運行時異常ConcurrentModificationException
    });
    } catch (Exception e) {
    e.printStackTrace();
    }finally {
    a++;//編譯不通過,a局部變量已被lambda表達式隱式的編輯為final
    System.out.println("finally輸出:" + a);
    }

    //常規for循環
    // for (int i = 0; i < lists.size(); i++) {
    // a++;
    // System.out.println("list元素:" + lists.get(i));
    // }
    }

    }
     

     


免責聲明!

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



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