程序员

解决 Java 闭包不能访问外部变量

作者:admin 2021-08-18 我要评论

概述 在使用 java 中的 lambda 表达式时 如果试图修改外部变量 编译器会报错 Variable used in lambda expression should be final or effectively final 告诉我...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)
概述

在使用 java 中的 lambda 表达式时 如果试图修改外部变量 编译器会报错 Variable used in lambda expression should be final or effectively final 告诉我们 count 变量必须设置成 final 类型才可以让闭包来访问。

image.png

如果这时我们将 count 设置成 final 类型 结果编辑器又报错了 Cannot assign a value to final variable count 告诉我们 final 类型的变量在闭包里面不能被修改。

image.png

那该怎么办呢?

解决

这里需要定义一个 Holder 类型 将需要修改的变量包装起来。

public class Holder T {
 private T value;
 public Holder() {
 public Holder(T value) {
 this.value value;
 public void value(T value) {
 this.value value;
 public T value() {
 return value;
}
使用
public static void main(String[] args) {
 Holder Integer count new Holder (0);
 List Integer list new ArrayList ();
 list.add(100);
 list.add(200);
 list.forEach(i - count.value(i));
 System.out.println(count.value());
}

本文转自网络,原文链接:https://developer.aliyun.com/article/787311

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • 解决 Java 闭包不能访问外部变量

    解决 Java 闭包不能访问外部变量

  • 阿里云服务网格ASM助力实现零信任、强

    阿里云服务网格ASM助力实现零信任、强

  • 常用Dos命令

    常用Dos命令

  • 【参赛经验分享】腾讯极客挑战赛第四期

    【参赛经验分享】腾讯极客挑战赛第四期

腾讯云代理商
海外云服务器