Kotlin lambda / Java SAM 互操作 - 类型不匹配

Kotlin lambda / Java SAM interop - type mismatch

我有一个现有的 Java 接口定义如下

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

并想定义一个变量,其中包含一个符合我理解的 SAM 转换的 Kotlin lambda

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

但我却收到类型不匹配错误。

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

lambda 实际上匹配 Java 函数定义,我在这里缺少什么?

进行 SAM 转换时,您需要明确提供类型:

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

请注意,您可以像以前那样省略 a 的类型声明。