java - 使用 for 循环生成 30 个 lambda 表达式

标签 java for-loop javafx lambda

我想为 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/

相关文章:

java - 带有关闭按钮 JavaFX 的标签

java - 无法将类型 'java.lang.String' 的值转换为所需的模型对象类型

python - 如何循环打印模型的所有 tf​​.Tensors?

Javapackager 第二次部署 IOException

java - 数组列表循环故障

java - 重置计数器 Java

两个 Controller 类之间的 JavaFX 通信

java - 从同一应用程序小部件的多个实例打开 Activity 的多个实例

java - struts2 中的多个应用程序属性,需要根据某些条件更改 java 中的属性文件?

java - 在用户计算机上的 sqlite 数据库上使用 jdbc 设置相对路径