Вызов функции высшего порядка Котлина из Java - PullRequest
0 голосов
/ 02 ноября 2018

Класс Котин

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 для вызова функции и ее функции, следовательно, пытаюсь использовать.

Как позвонить по вышеуказанному выделенному коду?

1 Ответ

0 голосов
/ 02 ноября 2018

Использование функциональных интерфейсов Kotlin в Java немного сложно и не очень чисто.

Ваш 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;
        }
    }
);
...