Звоните завершение котлина в Java - PullRequest
0 голосов
/ 07 июня 2018

У меня есть метод веб-запроса kotlin, который принимает функцию в качестве параметра.Из-за того, как настроен один из моих классов, мне нужно сохранить его как класс Java, но мне нужно вызвать метод веб-запроса из класса Java.

У меня есть класс с именем Lock, который яизвлекаю из своей базы данных, используя Fuel

Мой метод kotlin выглядит следующим образом

fun fetchLocks(completion: (Array<Lock>) -> Unit) {
  // asynchronous api calls that aren't relevant.
  completion(locks)
}

Я знаю, что этот метод работает, и могу вызвать его из файла kotlin

FuelHelper().fetchLocks { locks ->
  Do stuff with my locks
}

Проблема, с которой я сталкиваюсь, заключается в получении правильного синтаксиса для вызова этого метода в Java.

new FuelHelper().fetchLocks();

Ожидаемый параметр java: (Function1<?super Lock[], Unit>)

Я пыталсякакое-то время, и я не могу пройти через это.Любая помощь будет оценена.

Ответы [ 2 ]

0 голосов
/ 07 июня 2018

Это именно то, что говорится - вы должны передать объект, реализующий интерфейс Function1 (источник из сгенерированного файла Functions.kt):

/** A function that takes 1 argument. */
public interface Function1<in P1, out R> : Function<R> {
    /** Invokes the function with the specified argument. */
    public operator fun invoke(p1: P1): R
}

В вашем случае вы создаете анонимный класс таким же образомВы делаете для всех маленьких слушателей, как onClicks и т. д.:

    new FuelHelper().fetchLocks(new Function1<Lock[], Unit>() {
        @Override
        public Unit invoke(Lock[] locks) {
            // handle locks
            return null;
        }
    });
0 голосов
/ 07 июня 2018

Предполагается, что вы используете синтаксис Java 8.

new FuelHelper().fetchLocks(locks -> {
    ...
});

Или без лямбды

new FuelHelper().fetchLocks(new Function1<Lock[], Unit>() {
        @Override
        public Unit invoke(Lock[] locks) {
            return null;
        }
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...