我将 lambda 表达式作为参数传递给方法,并且想要修改在 lambda 表达式外部定义的变量。
我尝试了一些方法。目前,我有一个名为 success
的 AtomicBoolean
。在 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/