Lambda 表达式 - 无法将 lambda 参数设置为方法的参数

Lambda expressions - can not set lambda parameter as argument to method

我正在尝试使用 retrolambda 在 Android 上使用 lambda 表达式。在下面的代码中,我需要添加接口监听器:

 public interface LoginUserInterface {

        void onLoginSuccess(LoginResponseEntity login);

        void onLoginFail(ServerResponse sr);
    }

代码

 private void makeLoginRequest(LoginRequestEntity loginRequestEntity) {
        new LoginUserService(loginRequestEntity)
                .setListener(
                        login -> loginSuccess(login),
                        sr -> loginFail(sr))
                .execute();
    }

 private void loginSuccess(LoginResponseEntity login) {
         //TODO loginSuccess
    }

 private void loginFail(ServerResponse sr) {
        //TODO loginFail
    }

但是 Android Studio 标记为红色 loginSuccess(login)loginFail(sr) 为错误 并显示消息“LoginResponseEntity 无法应用于 ”和“ServerResponse 无法应用于
所以我不能将 lambda 参数 'login' 设置为方法 loginSuccess(login).
的参数 请帮助我理解这个表达式有什么问题。

您只能将 lambda 与 Functional interfaces 一起使用。这意味着您的界面必须指定 只有一个 方法。

要记住这一点(简单地说 - 能够使用 lambdas 而不是匿名 类),最好的方法是在你的接口上添加 @FunctionalInterface 注释。

@FunctionalInterface
public interface LoginUserInterface {
    LoginResult login(...)
}

然后调度 LoginResult

的值

是的,正确答案是 "You can use lambdas only with Functional interfaces. It means that your interface has to specify only one method."

对于其他会寻找解决方法的人,这是我的解决方案: 在两个功能界面上划分界面

public interface SuccessLoginUserInterface {
    void onLoginSuccess(LoginResponseEntity login);
}

public interface FailLoginUserInterface {
    void onLoginFail(ServerResponse sr);
}

你的 lambda 表达式看起来会很好:

private void makeLoginRequest(LoginRequestEntity loginRequestEntity) {
    new LoginUserService(loginRequestEntity)
            .setsListener(
                    login -> loginSuccess(login),
                    sr -> loginFail(sr))
            .execute();
}