在我的用例中,我想从lambda函数返回一个用户对象,如下面的代码所示。在发布问题之前,我尝试过许多类似的问题,例如this和this,但是没有主题可以解决我的问题,这是我的代码:
public class User {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class AppDatabase {
private static final int NUMBER_OF_THREADS = 4;
public static final ExecutorService databaseWriteExecutor =
Executors.newFixedThreadPool(NUMBER_OF_THREADS);
}
public class MyClass {
private User mUser;
public User findUser(){
AppDatabase.databaseWriteExecutor.execute(() -> {
mUser = work();
});
return mUser;
}
public User work(){
//simulate get user from database
User user = new User();
user.setName("Toto");
return user;
}
}
public class Main {
public static void main(String[] args) {
MyClass myClass = new MyClass();
User user;
user = myClass.findUser();
System.out.println(user.getName()); //this line: Exception in thread "main" java.lang.NullPointerException
}
}
[运行此代码时,我得到“线程异常”主“ java.lang.NullPointerException”。我的问题是如何获取由work()函数构建的User对象,但该函数应在代码中的后台线程中运行。
findUser
立即返回,并且由于尚未设置null
而返回mUser
。您需要等待它的设置,或者返回呼叫者可以等待的Future<User>
。