为了账号安全,请及时绑定邮箱和手机立即绑定

Lambda外部的布尔开关

Lambda外部的布尔开关

扬帆大鱼 2021-04-09 14:11:54
我正在用JavaFX开发游戏。它几乎完成了,但是我在移动检测方面遇到了问题,无法想到简单的解决方案。可能有,但我只是不知道显然,两者之间有更多代码,但我着重指出了有问题的部分。int finalX = x;int finalY = y;boolean jumpMade = false;boolean moveMade = false;// Mouse Controllerboard[x][y].setOnMouseClicked(event -> {    if (!moveMade) {        move(finalX, finalY, selectedMarbleX, selectedMarbleY, selectedMarbleColor);        // Here I would want to make moveMade = true;        // To block further possibility of moving.    }}试图更改为原子数组或单元素数组,但这无法完成工作,因为用户正在玩的“地图”具有多个可能的移动方向(因此不会阻塞所有方向)。而仅仅通过放心地将moveMade = true放在上面而出现的错误将引起“ lambda表达式中的变量应该是最终的或实际上是最终的”。
查看完整描述

2 回答

?
桃花长相依

TA贡献1860条经验 获得超8个赞

如果要访问和修改lambda表达式中的变量,请将其定义为类/实例变量。有一个真正的症结所在,您不应该排除该错误。


Gobbledygook还是一个简单的例子,


interface Q {

    void fun();

}

class ABC {

    public static boolean x = false;  // class variable

    public static void b(Q q) {

        q.fun();

    }


    public static void main(String[] args) {

        Q a = () -> {

            System.out.println("run simple lambda");

            x = true;

        };

        b(a);

        System.out.println(x);

    }


查看完整回答
反对 回复 2021-04-14
?
守候你守候我

TA贡献1802条经验 获得超10个赞

使用java.util.concurrent.atomic.AtomicBoolean实用程序类。它们持有对值的原子线程安全引用。


import java.util.concurrent.atomic.AtomicBoolean;


// Outside of lambda, instantiate the atomic boolean reference

AtomicBoolean ref = new AtomicBoolean(); // Constructor parameter optional: empty (false) / true / false


// Inside lambda, use the getters and setters

ref.set(true); // or: ref.set(false);


查看完整回答
反对 回复 2021-04-14
  • 2 回答
  • 0 关注
  • 175 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信