-
外部变量不能使用
-
例:
public static void main(String[] args) { List<User> users = new ArrayList<User>(); users.add(new User(20, "张三")); users.add(new User(22, "李四")); users.add(new User(10, "王五")); int time = 1 ; users.forEach((User user) -> { System.out.println(user.age); System.out.println(user.name); System.out.println("第" + time[0] + "次"); time = time + 1; }); } }
这里的Time是会报错的。
-
原因:Java会将time的值作为参数传递给Lambda表达式,为Lambda表达式建立一个副本,它的代码访问的是这个副本,而不是外部声明time变量。可能很多同学会问为什么非要建立副本呢,直接访问外部的time变量得多方便呢。答案是:这是不可能的,因为time定义在栈中,当Lambda表达式被执行的时候,result可能已经被释放掉了。
-
-
改为以下版本
public static void main(String[] args) { List<User> users = new ArrayList<User>(); users.add(new User(20, "张三")); users.add(new User(22, "李四")); users.add(new User(10, "王五")); int[] time = { 1 }; users.forEach((User user) -> { System.out.println(user.age); System.out.println(user.name); System.out.println("第" + time[0] + "次"); time[0] = time[0] + 1; }); } }
使用数组来存储。
-
lambda表达式注意项
最新推荐文章于 2024-08-24 09:10:47 发布