我正在尝试使用 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/