Преобразование java.util.function.Function в тип функционального интерфейса Kotlin - PullRequest
2 голосов
/ 08 марта 2019

Я работаю с двумя модулями, которые написаны на Java и Kotlin соответственно, следовательно, требуется некоторая совместимость.

В одном из случаев java-модуль возвращает функциональные интерфейсы с типом java.util.function.Function, который должен использоваться кодом kotlin.

Я мог бы использовать тип Java как есть. Тем не менее, я хотел бы иметь возможность привести это к нативному типу kotlin, будь то kotlin.Function или kotlin.reflect.KFunction. Причиной этого является возможность поддерживать модуль kotlin, аналогичный модулю java, который функционирует для клиента.

Есть ли способ сделать это?

1 Ответ

1 голос
/ 08 марта 2019

Вы не можете разыгрывать между ними, это просто два разных интерфейса. Но написать функции преобразования тривиально:

import java.util.function.Function

fun <A, B> Function<A, B>.toKotlin(): (A) -> B = { this.apply(it) }

fun <A, B> ((A) -> B).toJava(): Function<A, B> = Function { this(it) }

kotlin-stdlib-jdk8 может предоставить это, но, похоже, не может.

И, конечно, в большинстве случаев вы можете просто использовать и лямбда-ссылки / ссылки на методы Kotlin и Java для обоих случаев.

...