概述
在使用 java 中的 lambda 表达式时,如果试图修改外部变量,编译器会报错:Variable used in lambda expression should be final or effectively final,告诉我们 count 变量必须设置成 final 类型才可以让闭包来访问。
如果这时我们将 count 设置成 final 类型,结果编辑器又报错了:Cannot assign a value to final variable 'count',告诉我们 final 类型的变量在闭包里面不能被修改。
那该怎么办呢?
解决
这里需要定义一个 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()); }