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

Yur*_*off 3 java lambda android retrolambda

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

 public interface LoginUserInterface {

        void onLoginSuccess(LoginResponseEntity login);

        void onLoginFail(ServerResponse sr);
    }
Run Code Online (Sandbox Code Playgroud)

代码

 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
    }
Run Code Online (Sandbox Code Playgroud)

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

k0n*_*ner 5

您只能将 lambda 与Functional interfaces 一起使用。这意味着您的接口必须指定一种方法。

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

@FunctionalInterface
public interface LoginUserInterface {
    LoginResult login(...)
}
Run Code Online (Sandbox Code Playgroud)

然后发送值 LoginResult