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

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

概述

在使用 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 类型,将需要修改的变量包装起来。

publicclassHolder<T> {
privateTvalue;
publicHolder() {
    }
publicHolder(Tvalue) {
this.value=value;
    }
publicvoidvalue(Tvalue) {
this.value=value;
    }
publicTvalue() {
returnvalue;
    }
}

使用

publicstaticvoidmain(String[] args) {
Holder<Integer>count=newHolder<>(0);
List<Integer>list=newArrayList<>();
list.add(100);
list.add(200);
list.forEach(i->count.value(i));
System.out.println(count.value());
}
相关文章
|
2天前
|
Java
如何解决使用若依前后端分离打包部署到服务器上后主包无法找到从包中的文件的问题?如何在 Java 代码中访问 jar 包中的资源文件?
如何解决使用若依前后端分离打包部署到服务器上后主包无法找到从包中的文件的问题?如何在 Java 代码中访问 jar 包中的资源文件?
8 0
|
4天前
|
Java
【Java探索之旅】数据类型与变量 字面常量 整型变量
【Java探索之旅】数据类型与变量 字面常量 整型变量
14 0
|
4天前
|
存储 Java C语言
【Java探索之旅】数据类型与变量 浮点型,字符型,布尔型,字符串型
【Java探索之旅】数据类型与变量 浮点型,字符型,布尔型,字符串型
12 0
|
4天前
|
Java 开发者
Java变量命名规则
Java变量命名规则
12 0
|
5天前
|
运维 NoSQL Java
Serverless 应用引擎产品使用之在函数计算上部署Java服务并访问阿里云MongoDB如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
10 0
|
10天前
|
存储 Java 测试技术
一文搞清楚Java中的方法、常量、变量、参数
在JVM的运转中,承载的是数据,而数据的一种变现形式就是“量”,量分为:**常量与变量**,我们在数学和物理学中已经接触过变量的概念了,在Java中的变量就是在程序运行过程中可以改变其值的量。
16 0
|
10天前
|
存储 Java
JAVA变量类型
JAVA变量类型
13 0
|
15天前
|
安全 Java API
java借助代理ip,解决访问api频繁导致ip被禁的问题
java借助代理ip,解决访问api频繁导致ip被禁的问题
|
17天前
|
存储 NoSQL Java
探索Java分布式锁:在高并发环境下的同步访问实现与优化
【4月更文挑战第17天】Java分布式锁是解决高并发下数据一致性问题的关键技术,通过Redis、ZooKeeper、数据库等方式实现。它确保多节点共享资源时的同步访问,防止数据不一致。优化策略包括锁超时重试、续期、公平性和性能优化。合理设计分布式锁对支撑大规模分布式系统至关重要。