我在javafx中有这样的代码,
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
/**
*
* @author deb-l-ana
*/
public class NewFXMain extends Application {
@Override
public void start(Stage primaryStage) {
Group root=new Group();
Scene scene=new Scene(root,500,500,true);
int ctr=0;
Button b1=new Button("b1");
b1.setTranslateX(90);
root.getChildren().add(b1);
b1.setOnAction(e -> {
ctr=1;
});
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}
}
这给我一个编译错误
从lambda表达式引用的局部变量必须是最终的或有效的最终
但如果我宣布ctr
为最终,我无法修改它。我能做什么才能从lambda表达式修改局部变量?但是如果我使用一个数组,ctr1[]={0}
只有一个元素,那么我可以从lambda表达式引用它,这很好。
为什么会发生这种情况?如何从鼠标单击事件更新ctr
的值?
答案 0 :(得分:-1)
我无法比他更好地解释:https://stackoverflow.com/a/12750186/5677103 “整数是不可变的[...]但你可以设计自己的类来嵌入一个整数并使用它来代替整数。”
public class MutableInteger {
private int value;
public MutableInteger(int value) {
this.value = value;
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
}
无法修改最终对象的实例,但他的属性可以是。而且,int是一个私有类型,Integer是一个包装这种类型的对象。