我读过 lambda 表达式使用的外部变量必须是最终的或有效的最终的。例如,如果我尝试修改供应商主体中的外部字符串值,编译器会阻止我,就像上面的定义一样。但是如果我使用外部 Pojo(修改它的属性 - 所以它的内部状态),那么它可以正常工作并否定上面的声明。
怎么会?
package com.quicktutorialz.test;
import java.util.function.Supplier;
public class MainApplication {
public static void main(String[] args){
// MY NON-EFFECTIVELY-FINAL POJO
NamePojo namePojo = new NamePojo();
namePojo.setName("Luisa");
//MY LAMBDA
Supplier<String> supplier = () -> {
namePojo.setName("Alex"); //HOW IS THAT POSSIBLE?!?!
return "Hello " + namePojo.getName();
};
System.out.println(supplier.get());
}
}
class NamePojo {
String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}