zoukankan      html  css  js  c++  java
  • local variables referenced from a Lambda expression must be final or effectively final------理解

    前几天使用lamdba时,报了一个这个错,原因是在lamdba体中使用了一个变量,觉得很奇怪!

    今天在读这本书的时候,又看到了这个解释,这里有了更深刻的理解,总结一下:

    在jdk1.8之前在使用匿名内部类的时候方法里面的变量必须需要加final

     否则是会报错的,但是jdk1.8放松了这个限制,可以使用非final修饰,但是这个变量,是不允许另外赋值的,否则lamdba体重也会报错,如图:

    换句话说,Lambda 表达式引用的是值,而不是变量.所以在lamdba和匿名内部类中使用变量不能被改变

    如果你试图给该变量多次赋值,然后在 Lambda 表达式中引用它,编译器就会报错,典型的就是在for循环里使用lamdba了,如果你需要用到for循环的i变量,那么lamdba是不合适的:

  • 相关阅读:
    shuffle
    clamp
    max
    zip
    enumerate
    isinstance
    stack
    reshape(-1)
    meshgrid
    最长回文子串
  • 原文地址:https://www.cnblogs.com/houzheng/p/9778646.html
Copyright © 2011-2022 走看看