我正在用javafx构建一个国际象棋游戏应用程序,我遇到了一个我不太了解的问题。我正在尝试为我的棋子实现鼠标点击事件,但是当我尝试使用for循环为每个部分执行此操作时,我得到错误"从lambda表达式引用的局部变量必须是最终的或有效的最终版本&#34 ;。但是,当我独立创建每个鼠标事件时,没有问题。
public static ChessPiece[] BlackPieces = {
new ChessPieceRook("BLACK"),
new ChessPieceKnight("BLACK"),
new ChessPieceBishop("BLACK"),
new ChessPieceQueen("BLACK"),
new ChessPieceKing("BLACK"),
new ChessPieceBishop("BLACK"),
new ChessPieceKnight("BLACK"),
new ChessPieceRook("BLACK")};
这有效:
BlackPieces[0].setOnMouseClicked((MouseEvent event) -> {
if (turn % 2 == 0) {
setSelection(BlackPieces[0]);
setSelectionClip(PieceClips[0]);
}
});
但这并不是:
for (int i = 0; i < 8; i++) {
BlackPieces[i].setOnMouseClicked((MouseEvent event) -> {
if (turn % 2 == 0) {
setSelection(BlackPieces[i]);
setSelectionClip(PieceClips[i]);
}
});
}
任何人都可以向我解释这个吗?