我想为 30 个对象创建鼠标单击事件集,所有这些对象都执行相同的操作:
for(int i=0;i<30;i++){
seats[i].setOnMouseClicked(e->{
seats[i].setEffect(lighting);
});
}
但我不断收到这些错误:
error: local variables referenced from a lambda expression must be final or effectively final
seats[i].setEffect(lighting);
任何建议如何修复它,而不是手动编写 30 次
最佳答案
您不能在 lambda 表达式内引用变量 i
,因为执行 lambda 时它的值会发生变化。相反,请执行以下操作:
for(int i=0;i<30;i++){
Node seat = seats[i];
seat.setOnMouseClicked(e->{
seat.setEffect(lighting);
});
}
这假设lighting
是显式final
(即声明为final
),“有效最终”(即仅分配一次值,因此可以声明final
而不会引入编译错误),或者是一个字段(不是局部变量)。
关于java - 使用 for 循环生成 30 个 lambda 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40832107/