java:是否可以为Buttons数组设置lambda表达式是for循环?如果是这样的话?

Uul*_*ock 4 java javafx

我希望能够做到这样的事情:

for(i = 0; i < 10; i++) {
    //if any button in the array is pressed, disable it.
    button[i].setOnAction( ae -> { button[i].setDisable(true) } );
}
Run Code Online (Sandbox Code Playgroud)

但是,我得到一个错误说"local variables referenced from a lambda expression must be final or effectively final".我怎么还能像上面的代码那样做(如果可能的话)?如果无法完成,应该做些什么来获得类似的结果呢?

use*_*751 6

正如错误消息所述,从lambda表达式引用的局部变量必须是最终的或有效的final("有效最终"意味着编译器可以使它最终为您).

简单的解决方法:

for(i = 0; i < 10; i++) {
    final int ii = i;
    button[i].setOnAction( ae -> { button[ii].setDisable(true) } );
}
Run Code Online (Sandbox Code Playgroud)

  • 你也可以引用`button [i]`并重用它.`button current = button [i]`和`current.setDisable(true);`在lambda中. (3认同)