Kotlin лямбда / Java SAM взаимодействия - несоответствие типов - PullRequest
0 голосов
/ 08 ноября 2018

У меня есть существующий интерфейс Java, определенный следующим образом

public interface MyRetriever extends Function<String, Optional<String>> {}

и хочу определить переменную, содержащую лямбду Котлина, которая соответствует преобразованию SAM согласно моему пониманию

var a : MyRetriever = { s : String -> Optional.ofNullable(s.toLowerCase()) }

Но вместо этого я получаю ошибку несоответствия типов.

Type missmatch.
Required: MyRetriever
Found: (String) -> Optional<String> 

Лямбда фактически соответствует определению функции Java, что мне здесь не хватает?

1 Ответ

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

При выполнении преобразования SAM вам необходимо явно указать тип:

var a = MyRetriever { s : String -> Optional.ofNullable(s.toLowerCase()) }

Обратите внимание, что вы можете опустить объявление типа для a, как вы делали это раньше.

...