【发布时间】:2016-03-05 11:57:41
【问题描述】:
我需要在 javafx 的 lambda 事件处理程序中更改局部变量。
SerialPort comPorts[] = SerialPort.getCommPorts();
MenuItem[] portsItems = new MenuItem[10];
int q=0;
for (SerialPort port : comPorts) {
portsItems[q] = new MenuItem(port.getSystemPortName());
portsItems[q].setOnAction(actionEvent -> {
portNum = q;
connect.setDisable(false);
});
comPortsMenu.getItems().add(portsItems[q]);
}
问题是我需要在每个循环中增加 q,但我不能这样做,因为 q 必须是 final 或 有效地最终在 lambda 中使用。
【问题讨论】:
-
@AndrewTobilko 你引用了他的话。
-
将
q设为类实例字段。 -
你想在哪里增加值?如果您只需要“在循环中”执行此操作,则无需在 lambda 表达式中执行此操作即可。如果您需要一个值为 q 的最终变量,只需复制它:
final int pNumber = q;然后portNum = pNumber;就可以了。
标签: javafx java javafx lambda final