gpt4 book ai didi

java - 从 lambda 表达式中更新 AtomicBoolean

转载 作者:行者123 更新时间:2023-12-05 00:19:19 25 4
gpt4 key购买 nike

我将 lambda 表达式作为参数传递给方法,并且我想修改在 lambda 表达式之外定义的变量。
我已经尝试了几件事。目前,我有一个 AtomicBoolean调用success .在 lambda 表达式中,我调用了 success.set(true) .但是,当我记录 success 的值时变量,它仍然是 false并且似乎没有更新。
基本上,我正在调用一个返回类型为 void 的函数,并且需要知道该函数是否成功。
我究竟做错了什么?
这是代码:

public void createUser(String email, String password) {
AtomicBoolean success = new AtomicBoolean(false);
Amplify.Auth.signUp(
email,
password,
AuthSignUpOptions.builder()
.userAttribute(AuthUserAttributeKey.email(), email)
.build(),
result -> success.set(true),
error -> Log.e("AuthQuickStart", "Sign up failed", error)
);
Log.d("success", String.valueOf(success.get()));
}

最佳答案

如果 signUp方法被阻塞(即它在注册完成后返回),您的代码应该按预期工作。所以我怀疑它是异步的。
在这种情况下,除了使用 boolean 值之外,您还可以使用 CountDownLatch等到异步方法完成:

AtomicBoolean success = new AtomicBoolean(false);
CountDownLatch done = new CountDownLatch(1);
Amplify.Auth.signUp(
email,
password,
AuthSignUpOptions.builder().userAttribute(AuthUserAttributeKey.email(), email).build(),
result -> { success.set(true); done.countDown(); },
error -> { Log.e("AuthQuickStart", "Sign up failed", error); done.countDown(); }
);
done.await(); //you may want to add a timeout here
Log.d("success", String.valueOf(success.get()));

关于java - 从 lambda 表达式中更新 AtomicBoolean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63282617/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com