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

标签 java android lambda retrolambda

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

 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 cannot be applied to ”和“ServerResponse cannot be applied to
所以我无法将 lambda 参数“login”设置为方法 loginSuccess(login) 的参数。
请帮助我理解这个表达式有什么问题。

最佳答案

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

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

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

然后调度 LoginResult

的值

关于java - Lambda 表达式 - 无法将 lambda 参数设置为方法的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33989563/

相关文章:

java - 如何从文本文件中填充 Map<String, List<String>>? -难以动态命名每个列表

java - 在Gradle任务中拉出和运行依赖项

java - 将 scala.Function1 写成 lambda 的正确方法是什么?

java - 使用 ScheduledExecutorService 创建计时器

java - SQL java获取分配给自增主键的值

java - 操作栏上的 "Back"按钮 - Android。如何去 "back"?

java - Android:唯一 ID 生成器和语言环境

android - 从在actionbarstylegenerator上创建的操作栏更改应用程序的标题颜色

c# - 反射与编译以获得 MemberExpression 的值(value)

python - python lambda 函数在 class 和 def 中的区别