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();
}
我正在尝试使用 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();
}