从Java调用Kotlin的高阶函数

时间:2018-11-02 17:22:11

标签: java android kotlin higher-order-functions kotlin-function-type

科丁课

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(用户名-> LoginService :: changePassword)

为什么要使用高阶功能

由于我必须区分用于调用函数的每个API调用及其功能,因此要尝试使用。

如何调用上面突出显示的代码?

2 个答案:

答案 0 :(得分:2)

在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;
        }
    }
);

答案 1 :(得分:0)

更多带有Lamda表达式的短代码

setRetrofitCall(s -> {
        LoginService.getLoginData(s); 
            return Unit.INSTANCE;
    });