Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 嵌套lambda的循环干扰误差_Java_Playframework - Fatal编程技术网

Java 嵌套lambda的循环干扰误差

Java 嵌套lambda的循环干扰误差,java,playframework,Java,Playframework,我正在尝试为我的Play Framework应用程序创建注册处理程序,但遇到了一些问题。此代码的目标是获取提交的数据,然后检查用户名或电子邮件是否正在使用。这是使用内置在我的用户类中的方法完成的,用户类是一个模型 注册方法: public static F.Promise<Result> register() { // Get the POST data and turn it into something we can read from DynamicForm f

我正在尝试为我的Play Framework应用程序创建注册处理程序,但遇到了一些问题。此代码的目标是获取提交的数据,然后检查用户名或电子邮件是否正在使用。这是使用内置在我的用户类中的方法完成的,用户类是一个模型

注册方法:

public static F.Promise<Result> register() {
    // Get the POST data and turn it into something we can read from
    DynamicForm form = Form.form().bindFromRequest();

    // Get the email, username, and password
    String email = form.get("email");
    String username = form.get("username");
    String password = form.get("password");

    return User.findByUsername(username).map(user -> {
        // For .map to run we must not have encountered an error, this means
        // a user already has this username (otherwise the doc would not exist)
        return redirect("/register");
    }).recover(userCheckError -> {
        // For .recover to run there must have been an error. This will happen
        // if a doc was not found with the username (therefore it is not in use)
        return User.findByEmail(email).map(option -> { // ERROR START
            // We now have an F.Option object. If the email is already taken,
            // then the Option is defined (has a value within it), if the email
            // is free, the Option will be undefined (no value within it)
            if (option.isDefined()) {
                return redirect("/register");
            } else {
                return redirect("/register");
            }
        }); // ERROR END
    });
}
公共静态F.承诺寄存器(){
//获取POST数据并将其转换为我们可以读取的内容
DynamicForm form=form.form().bindFromRequest();
//获取电子邮件、用户名和密码
字符串email=form.get(“email”);
字符串用户名=form.get(“用户名”);
字符串密码=form.get(“密码”);
返回User.findByUsername(用户名).map(用户->{
//要运行.map,我们必须没有遇到错误,这意味着
//用户已具有此用户名(否则该文档将不存在)
返回重定向(“/寄存器”);
}).recover(userCheckError->{
//对于要运行的.recover,必须存在错误。这将发生
//如果找不到用户名为的文档(因此该文档未被使用)
返回User.findByEmail(email).map(选项->{//ERROR START
//我们现在有一个F.选项对象。如果电子邮件已经被接收,
//然后,如果电子邮件
//如果是免费的,则该选项将未定义(其中没有值)
if(option.isDefined()){
返回重定向(“/寄存器”);
}否则{
返回重定向(“/寄存器”);
}
});//错误结束
});
}
findByUsername和findByEmail方法(在用户类中):

public static F.Promise findByUsername(字符串用户名){
返回bucket.get(username.toLowerCase(),User.class);
}
公共静态F.Promise findByEmail(字符串电子邮件){
返回bucket.find(“用户”,“通过电子邮件”,queryhelp.findOne(电子邮件),User.class).map(结果->{
if(result.isEmpty()){
返回F.Option.None();
}否则{
User=result.iterator().next();
返回F.Option.Some(用户);
}
});
}
编辑:我在register方法中添加了注释,并删除了一些不需要的代码。我还标记了错误开始和结束的位置(IntelliJ高亮显示的行。确切的错误是“lambda表达式中的返回类型不正确”。register方法需要返回
Promise
,但该代码块返回的是
Promise
(通用?)

Javadocs:

你能发布准确的错误消息吗?请剪切并粘贴所有的错误消息。如果你能制作一个完整的示例,这会有所帮助。这里有很多未定义的变量和类。添加了完整的错误消息并澄清了一些内容。我真的不能发布所有的代码,因为它非常适合于播放!框架。我可以但是,为F.Promise和F.Option类提供Javadoc。
public static F.Promise<User> findByUsername(String username) {
    return bucket.get(username.toLowerCase(), User.class);
}

public static F.Promise<F.Option<User>> findByEmail(String email) {
    return bucket.find("users", "by_email", QueryHelper.findOne(email), User.class).map(result ->{
        if (result.isEmpty()) {
            return F.Option.None();
        } else {
            User user = result.iterator().next();
            return F.Option.Some(user);
        }
    });
}