关于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