【发布时间】:2018-11-02 17:22:11
【问题描述】:
Kotin 类
class LoginService{
fun getLoginData(loginData: String) {
request(LoginApi.create().getLoginData(loginData))}
}
fun changePassword(_:String){
request(LoginApi.create().changePassword(_)
}
class RequestData {
var retrofitCall: ((String) -> Unit)? = null
}
}
Java 类
class LoginModel{
private void loginData(){
RequestData data = new RequestData();
requestData.setRetrofitCall(username ->LoginService::getLoginData)
}
private void changePassword(){
RequestData data = new RequestData();
requestData.setRetrofitCall(username ->LoginService::changePassword)
}
}
requestData.setRetrofitCall(username ->LoginService::changePassword)
为什么要使用高阶函数:
由于我必须区分调用函数的每个 API 调用与其特性,因此尝试使用。
如何调用上面高亮的代码?
【问题讨论】:
-
那是对 lambda 的错误使用。
username ->表示“这是一个新函数”,这意味着您不能在那里传递函数引用。只需使用setRetrofitCall(LoginService::changePassword) -
我是否需要升级到 Java 1.8 才能做到这一点?
-
你需要 Java 1.8 才能使用 Java lambda,是的。
-
我不想那样做,有没有其他办法?
-
你可以使用retrolambda。但是您可以升级到 Java 8,而不会在平台上造成任何明显损失。 Java 8 基础语言功能适用于所有平台。
标签: java android kotlin higher-order-functions kotlin-function-type