从 Java 调用 Kotlin 的高阶函数
Call Higher Order function of Kotlin from Java
科廷Class
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
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(用户名 ->LoginService::changePassword)
为什么高阶函数:
因为我必须区分每个 API 从其功能调用函数的调用,因此尝试使用。
如何调用上面高亮的代码?
在 Java 中使用 Kotlin 函数式接口有点棘手而且不是很干净。
您的 setRetrofitCall()
需要看起来像这样:
setRetrofitCall(new Function1<String, Unit>() {
@Override
public Unit invoke(String s) {
LoginService.getLoginData(s); //I'm pretty sure LoginService is supposed to be static?
return Unit.INSTANCE;
}
}
);
更多带有 Lambda 表达式的短代码
setRetrofitCall(s -> {
LoginService.getLoginData(s);
return Unit.INSTANCE;
});
科廷Class
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
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(用户名 ->LoginService::changePassword)
为什么高阶函数:
因为我必须区分每个 API 从其功能调用函数的调用,因此尝试使用。
如何调用上面高亮的代码?
在 Java 中使用 Kotlin 函数式接口有点棘手而且不是很干净。
您的 setRetrofitCall()
需要看起来像这样:
setRetrofitCall(new Function1<String, Unit>() {
@Override
public Unit invoke(String s) {
LoginService.getLoginData(s); //I'm pretty sure LoginService is supposed to be static?
return Unit.INSTANCE;
}
}
);
更多带有 Lambda 表达式的短代码
setRetrofitCall(s -> {
LoginService.getLoginData(s);
return Unit.INSTANCE;
});